我写了一个正则表达式,但我对如何注入一个环顾问题很困惑。
我有以下字符串:
myName is myLastName
yourName is yourLastName
我希望,使用负面的lookbehind,使它只匹配不包含myName的那个。 myName不一定在句子的开头,它可能只是在另一个较长的短语的中间。到目前为止,我已经写了以下匹配reg exp,它们匹配两个句子(当然),但是我想用负面看后面添加一个条件:
(([a-zA-Z]*)( *)(is)( *)([a-zA-Z]*))
答案 0 :(得分:1)
如果您想使用负面反对,那么以下正则表达式应该有效:
([a-zA-Z]+)(?<!\bmyName\b) +is +([a-zA-Z]+)
(?<!\bmyName\b)
是一个负面的lookbehind,它与前面带有文字字符串myName
的单词不匹配。 \b
用于字边界。
答案 1 :(得分:0)
如果您只是想匹配不包含单词myName
的字符串,那么您可以使用以下正则表达式,并带有否定的前瞻:
/^(?!myName).*$/
<强>解释强>
/
- 开始分隔符
^
- 在字符串开头处断言位置(?!
- 负向前瞻myName
- 字面匹配字符myName
)
- 前瞻.*
- 匹配任何字符(换行符除外)零次或多次$
- 在字符串末尾断言位置/
- 结束分隔符基本上,上述正则表达式将匹配任何不包含单词myName
的字符串(区分大小写)。
测试案例
$arr =['myName is myLastName','yourName is yourLastName'];
foreach ($arr as $str) {
if (preg_match('/^(?!myName).*$/', $str, $matches)) {
echo 'Match', PHP_EOL;
} else {
echo 'No match', PHP_EOL;
}
}
输出:
No match
Match