正则表达式。查找以这两个特殊字符结尾的字符串

时间:2014-03-25 14:01:46

标签: php regex

{(嗨,怎么了?这是第一个括号:( ...)}

现在,我想获取{(和)}字符之间的文本。

我这样做了:

preg_match('/\{\(([^\)\}]+)\)\}/',$string,$match);

但它不起作用。但是,如果我删除文本中的),它就会有效。但我需要在文本中。

如何过滤{(和)}字符之间的文本。?

2 个答案:

答案 0 :(得分:2)

使用.*?代替[^\)\}]+

作为旁注,您可以使用[^)}]+,因为)}在字符类中没有特殊含义。

答案 1 :(得分:2)

你的正则表达式完全正常:

$string = '{( Hi whats up? this is a first bracket: (... )}';
preg_match('/\{\(([^\)\}]+)\)\}/',$string,$match);
var_dump($match[1]);

这会产生输出(see demo):

string(44) " Hi whats up? this is a first bracket: (... "

字符串{()}之间恰好是什么。

备注:

  • 您无需在字符类中转义)}。在字符类中,它们的行为与普通字符一样,并且会丢失元字符属性。因此,您可以使用[^\)\}]

  • 而不是[^)}]
  • 如果您想简化正则表达式,可以改用/\{\((.*?)\)\}/。这会捕获字符串之间的任何内容(.*?).*匹配除换行符之外的所有内容,?使其不贪婪,因此它尽可能匹配。

  • 如果你的字符串跨越多行,那么当前的正则表达式将不起作用。您可以使用s modifier来解决此问题。 s修饰符更改点元字符的默认行为。设置s修饰符后,.也会匹配换行符。