当我遇到这个问题时,我试图为别人做一个正则表达式.要求是正则表达式应该返回一组字符串的结果,其中包括"apple".例如,请考虑以下字符串:
"I have an apple"
"You have two Apples"
"I give you one more orange"
结果集应该有前两个字符串.
我试过的正则表达式是:
/[aA]pple/
和 /[^a-zA-Z0-9][aA]pple/
第一个问题是像"aapple","bapple"等一样的话(好吧,所以它们没有意义,但仍然......)用它测试正面,而第二个问题是当一个字符串时实际上以"苹果","苹果和橘子"这个词开头,例如,它测试为负面.有人可以解释为什么第二个正则表达式以这种方式运行以及正确的正则表达式是什么?
/(^.*?\bapples?\b.*$)/i
编辑:上面将匹配包含单词"apples"的整个字符串,我认为这是你要求的.如果您只是想查看字符串是否包含该单词,则以下内容将起作用.
/\bapples?\b/i
我试过的正则表达式是:
/[aA]pple/ and /[^a-zA-Z0-9][aA]pple/
第一个只是按顺序检查是否存在以下字符:apple,无论它们使用的是什么上下文.\ b或字边界字符匹配任何非字字符和字符字符的位置见面,ala \W\w
.
第二个是在苹果出现之前尝试匹配其他字符,并且与第一个字符基本相同,除了它需要前面的其他字符.
我回答的那个如下作品.从字符串的开头,非贪婪地匹配任何字符(如果它们存在),直到遇到字边界.如果字符串以apple开头,则字符串的开头是字边界,因此它仍然匹配.然后匹配字母a-p-p-l-e
,s
如果存在,则后跟另一个字边界.然后它将所有字符匹配到字符串的末尾.最后的/ i意味着它不区分大小写,所以'Apple','APPLE'和'apple'都是有效的.
如果您有时间,我强烈建议您浏览http://regular-expressions.info上的教程.它真的很深入,并讨论正则表达式引擎如何匹配不同的表达式,它帮了我一吨.