正则表达式和preg_replace_callback

时间:2012-05-03 10:29:32

标签: php regex

我的正则表达式有问题 我正在使用令牌,我必须解析这样的文字:

Just some random text
#IT=AB|First statement# #xxxx=xxx|First statement|Second statement#
More text

我使用preg_replace_callback因为我必须使用第一个语句或第二个语句,这取决于第一个表达式是否为真;这是一种IF...ELSE...陈述。

我期望的是2个这样的元素:

#IT=AB|First statement# 
#xxxx=xxx|First statement|Second statement#

所以我可以在回调函数中开始操作它们 我尝试使用这个正则表达式/#.*#/,但是我获得了整个字符串,它没有被解析为元素。

我怎样才能实现这一目标?对不起,但正则表达式不是我的事情:(

1 个答案:

答案 0 :(得分:4)

默认情况下,量词*是贪婪的。因此,.*会尽可能多地匹配,因此它也会匹配#。要解决此问题,您可以通过在*之后添加?来使.*?非贪婪。现在/#.*?#/ 会尝试尽可能少。

/#[^#]*#/

或者您只能在两个#:

之间查找非#字符
{{1}}