繁体   English   中英

如何设计仅捕获没有特定字符组合的字符串的模式?

[英]How do I design a pattern that only captures strings without certain character combinations?

我正在努力应对正则表达式的前瞻,我能找到的所有教程都是用于密码检查而不是某些字符组合。

这是一个我不明白的问题,它描述了我与正则表达式的这一部分的斗争:

$string1 = 'I have a yellow engine, I have a black engine';
$string2 = 'I have a yellow engine, I have a red engine';
$string3 = 'I have a red engine, I have a black engine';

$pattern = '~I.*?(?!.*(red|green|blue)).*?engine~';

$preg_match_all($pattern, $string[1-3], $matches);

$string1匹配正确:

0 => "I have a yellow engine"
1 => "I have a black engine"

$string2匹配整个字符串, $string3匹配类似于$string1

如何在没有特定颜色的情况下设计仅捕获字符串('我有[颜色]引擎')的图案?

负面前瞻后的.*将匹配所有内容,实际上会破坏前瞻的效果。 你可以简单地使用以下正则表达式:

I\s(?:(?!(red|green|blue)).)*engine

演示: https//regex101.com/r/tO9nC5/1

请注意,你甚至不需要.*在预测中,因为你有一个* out,它使它匹配每个字符串长度。

另请注意,如果您想阻止正则表达式匹配以下字符串:

I have everything I don't engine

事实上,如果你想在engine之前匹配内部I ,你最好将I添加到禁用词列表中:

I\s(?:(?!(I|red|green|blue)).)*engine

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM