我还没弄明白这件事。
我需要通过匹配whole及其周围的下划线来匹配所有这些字符串(在一个regex语句中):
whole_anythinganything_wholeanything_whole_anything但它绝不能与此相匹配
anythingwholeanythinganything_wholeanythinganythingwhole_anything这意味着..。做一个regex语句,只有在匹配短语whole之前、之后或两者都有下划线时,它才会使用regex语句。如果没有下划线就不行。
以下是
preg_match("/(whole_|_whole_|_whole)/",string)不是解决办法;)
2015/02/09编辑:增加条件5和6.以供澄清
发布于 2015-02-07 00:58:17
另一种选择。通过这种方式,我们可以在_之前和之后检查单词边界或whole的存在,但是我们通过负前瞻将单词whole排除在外。
(?!\bwhole\b)((?:_|\b)whole(?:_|\b))发布于 2015-02-07 00:33:19
您可以减少备选方案中的案例数:
preg_match('/(_whole_?|whole_)/', $string);如果前面有下划线,则后下划线是可选的。但是,如果之前没有下划线,则需要后面的下划线。
您可以使用PHP变量来解决将单词放入两次的问题:
$word = preg_quote('whole');
preg_match("/(_{$word}_?|{$word}_)/", $string);发布于 2015-02-07 00:34:00
可以在之前和之后排除所有字母数字字符。不幸的是,您不能使用\w,因为_被认为是一个单词字符
([^a-zA-Z0-9])_?whole_?([^a-zA-Z0-9])这将排除字母数字前后的匹配,并且前面、后面或两者的下划线都是可选的。如果不存在,它不能匹配,因为它不能通过一个字母或数字进行。您可以将其更改为包含特殊字符和批号。
https://stackoverflow.com/questions/28377018
复制相似问题