我正在寻找一个正则表达式模式,该模式匹配任何包含且不以冒号开头的单词。XYZ:例如,我只想从 匹配 。This isXYZ a :exampleXYZaisXYZ我的第一个想法是使用这个正则表达式模式:/(?<!\:[^\s\r\t\n])XYZ/基本上,负面的查看会确保事先没有空格就没有冒号。但是,这不起作用,因为 lookbehind 断言必须是固定长度。编辑:我也想得到utf8的支持。
1 回答
皈依舞
TA贡献1851条经验 获得超3个赞
你可以有一个正则表达式,如下所示:
/\b((?<!:)\w*XYZ\w*)\b/ui
\b
前后只是匹配一个单词边界。在 中,我们检查其中是否有任何单词,并且它前面有零个或多个字符,后面有零个或多个字符。在负向隐藏的帮助下,我们确保它前面没有。
((?<!:)\w*XYZ\w*)
XYZ
(?<!:)
:
正如@unclexo在注释中提到的,您可以在末尾添加修饰符以支持 UTF-8 序列匹配。有关详细信息,请参阅此处。
u
您还可以添加不区分大小写匹配的标志。
i
片段:
<?php
$tests = [
'This isXYZ a :exampleXYZa',
'isXYZ a :exampleXYZa abcXYZ',
'isXYZ a :exampleXYZXYZa abcXYZ',
'XYZ',
'XYZjdhf',
'This isXYZ a example:XYZa',
'äöüéèXYZ :äöüéèXYZäöüéè'
];
foreach($tests as $test){
if(preg_match_all('/\b((?<!:)\w*XYZ\w*)\b/ui',$test,$matches)){
print_r($matches[0]);
}
}
演示:https://3v4l.org/Y8SMj
- 1 回答
- 0 关注
- 98 浏览
添加回答
举报
0/150
提交
取消