{(嗨,怎么了?这是第一个括号:( ...)}
现在,我想获取{(和)}字符之间的文本。
我这样做了:
preg_match('/\{\(([^\)\}]+)\)\}/',$string,$match);
但它不起作用。但是,如果我删除文本中的(),它就会有效。但我需要(在文本中。
如何过滤{(和)}字符之间的文本。?
答案 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
修饰符后,.
也会匹配换行符。