为什么"?[^ az\ - \+]点击[^ az\ - \+]"不匹配"点击"(没有空格作为第一个字符?)

Lup*_*upo 2 php regex

我回来了一个正则表达式的问题 - 我需要测试一个字符串的模式出现 - 它可以隐藏在字符串的某个地方 - 正面,正面但前面有一个空白,介于两者之间或最后,也许最后是空白.

我认为这个正则表达式可能会起作用 - 但它没有做到这一点:

/ ?[^a-z\-\+]hit[^a-z\-\+]/
Run Code Online (Sandbox Code Playgroud)

因为它只显示第一个命中,当它前面有一个空白 - 因为我用问号标记了第一部分 - 我认为第一个字符也可能被省略 - 请再次让我回到轨道上告诉我哪里错了. ..

我在这里做了一个小提琴:http://regexr.com/38lcq(编辑:我刚尝试了"Niet the Dark Absol"的正则表达式 - 更好但仍然提供了比我想要的更多的比赛...)

Nie*_*sol 5

它不起作用,因为你[^a-z\-+]要求角色在你的"目标"之前hit.

尝试:/\bhit\b/- 使用\b表示单词边界.

你也可以更具体:

/(?<![a-z0-9+-])hit(?![a-z0-9+-])/i
Run Code Online (Sandbox Code Playgroud)

这使用负面的lookbehind和lookahead来排除你不想要的东西.