什么正则表达式模式可用于查找带有括号对中的以下点的单词。
作为。df.kj hlasfa ( asd.las kdfh. ) dfs adk jfh。a (sd.kf) jhd (dsk fh. ) dskfdf asdf dfs lkjh asdfdsfjkhlkjh ( asdf. )as fadf asf
所需结果以粗体显示。
您可以使用前瞻,它断言在下一个右括号之前没有左括号:
preg_match_all('/[a-zA-Z]+\.(?![a-zA-Z])(?=[^()]*\))/', $input, $matches);
您将在 中找到四个匹配项$matches
。
第一次否定前瞻消除了 HamZa 在评论中提到的情况。第二个(正)前瞻尝试在下一个左括号之前找到一个右括号。
这里有一个警告。一旦你有嵌套的括号,这将开始崩溃。some(text. (here))
不匹配text.
。嵌套模式(可以通过使用括号出现)通常超出了正则表达式的范围,尽管一些引擎可以部分处理它们。如果你是这种情况,你最好手动遍历字符串并计算括号。
许多选项之一是:
\b[a-zA-Z]+[.](?=[ )])(?=[^(]*[)])