【发布时间】:2012-04-30 11:00:58
【问题描述】:
我正在尝试创建一个匹配任何这些文本的正则表达式(在 PHP 中):
#{text}
#{text1}{text2}
#{text1}{numbers}{text2}
#{text1}{text with spaces}{numbers}{text2}
等等。基本上第一个块只能容纳没有空格的文本,而其余的可以容纳任何东西。在那之后,得到匹配那些文本1...数字等。我一直在尝试一些正则表达式,但它没有成功。这是最后一个:
/#{(\w+)}({([\ a-zA-Z0-9*])})*/U
提前致谢!
编辑:就像@stema 建议的那样,我将我的正则表达式更改为这个:
/#\{(\w+)\}(\{([^}]*)\})*/
我避免使用 Ungreedy 标志,因为它根本没有帮助表达:)。但是,结果并没有我需要的那么多:
array(4) {
[0]=>
string(42) "#{text1}{text with spaces}{numbers}{text2}"
[1]=>
string(5) "text1"
[2]=>
string(7) "{text2}"
[3]=>
string(5) "text2"
}
似乎中间参数没有被解析(这对我来说很奇怪)。
【问题讨论】:
-
它失败了:当试图解析最后一个例子(有 4 个块)时,我得到了这些匹配:#{text1} 和 text1
-
看来您只是在计算第二个大括号内的一个字符
{([\ a-zA-Z0-9*])}应该类似于{([\ a-zA-Z0-9*]+)}