2

什么正则表达式模式可用于查找带有括号对中的以下点的单词。

作为。df.kj hlasfa ( asd.las kdfh. ) dfs adk jfh。a (sd.kf) jhd (dsk fh. ) dskfdf asdf dfs lkjh asdfdsfjkhlkjh ( asdf. )as fadf asf

所需结果以粗体显示。

4

2 回答 2

3

您可以使用前瞻,它断言在下一个右括号之前没有左括号:

preg_match_all('/[a-zA-Z]+\.(?![a-zA-Z])(?=[^()]*\))/', $input, $matches);

您将在 中找到四个匹配项$matches

第一次否定前瞻消除了 HamZa 在评论中提到的情况。第二个(正)前瞻尝试在下一个左括号之前找到一个右括号。

这里有一个警告。一旦你有嵌套的括号,这将开始崩溃。some(text. (here))不匹配text.。嵌套模式(可以通过使用括号出现)通常超出了正则表达式的范围,尽管一些引擎可以部分处理它们。如果你是这种情况,你最好手动遍历字符串并计算括号。

于 2012-11-10T18:02:25.920 回答
2

许多选项之一是:

\b[a-zA-Z]+[.](?=[ )])(?=[^(]*[)])        
于 2012-11-10T18:48:14.730 回答