排除一组字符中的表达式

时间:2013-01-23 01:21:12

标签: regex preg-match

如何编写匹配任何这些字符的正则表达式

[a-z.' ]

但不包括此表达

(?:bl(?: |\. |\.)ah)

表达式可能出现{0,}次,在字符串的开头,中间或结尾

2 个答案:

答案 0 :(得分:1)

除非我遗漏任何内容,否则以下模式应该匹配。您可能希望用“\bblah\b

周围的边界字符包装”blah“
(?<=^|[^a-z.' ]|blah)(?:(?!blah)[a-z.' ])+

与您的主要模式(需要避免bl ahbl. ahbl.ah)一样,它将是

~
    (?<=^|[^a-z.' ]|bl[. ]ah|bl\.\ ah)
    (?:(?!bl(?:\ |\.\ ?)ah)[a-z.' ])+
~ix

有了lookbehinds的坏事,你需要声明精确的长度。因此,您需要在lookbehind中明确地写出您想要(或不想)的内容。

答案 1 :(得分:1)

使用负面展望:

^(?!.*bl[. ]*ah)[a-z.' ]*

如果你想对“blah”中干预字符的最大数量感到迂腐:

 ^(?!.*bl[. ]{,2}ah)[a-z.' ]*