匹配包裹的图案

时间:2012-11-10 17:31:06

标签: php regex

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

  

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

期望的结果是粗体。

2 个答案:

答案 0 :(得分:3)

您可以使用lookahead,声明在下一个结束之前没有左括号:

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

您会在$matches找到四个匹配项。

第一个否定先行消除了评论中HamZa提到的案例。第二个(正)前瞻试图在下一个开头之前找到一个右括号。

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

答案 1 :(得分:2)

众多选择之一是:

\b[a-zA-Z]+[.](?=[ )])(?=[^(]*[)])