有一行:
文字{msg ru key}
文字文字文字{msg key [m=1,p=1]}
文字{msg ru key
[m=la la|p=1]}
文字
如您所见,它有一个标签{msg}
。
如何编写正则表达式以解析此标签?
如果标签是这样写的:{msg ru key}
那么输出应该是这样的:
array(
0 => ru,
1 => key
);
如果标签是这样写的:{msg ru key [m=la la|p=1]}
那么输出应该是这样的:
array(
0 => ru,
1 => key,
2 => [m=la la|p=1]
);
如果标签是这样写的:{msg key [m=la la|p=1]}
那么输出应该是这样的:
array(
0 => key,
1 => [m=la la|p=1]
);
要在特定子字符串中查找多个匹配项,您需要使用基于运算符的模式
\G
(= 字符串开头或上一个匹配的结尾)。请参阅正则表达式演示。
(?:(?!^)\G|{msg)
- 上一个匹配结束 ((?!^)\G
) 或 (|
) 子字符串{msg
\s+
- 1 个或多个空格字符\K
- 清除当前匹配的缓冲区的操作符(好像到目前为止什么都没有找到)(?:\w+|\[[^][]*])
- 二选一:\w+
- 1 个或多个字母、数字或_
|
- 或者\[[^][]*]
- 形式的子字符串[...]
(括号之间不能有其他括号)(?=[^}]*})
- (preview block ahead) 在字符串中的给定位置之后不能有 0 个或多个字符,而不是}
, 然后}
.如果您只是在具有多个子字符串的字符串上使用此表达式,
{msg...}
则会找到所有匹配项,但不会对它们进行分组(请参阅PHP 代码示例)。要将它们分组,您需要使用一些代码:请参阅PHP 代码示例。结果: