Regex (正则表达式)如何将Lookaround(Lookbehind)添加到此表达式中
我已经写了一个正则表达式,但对如何向其中注入lookaround感到困惑 我有以下字符串:Regex (正则表达式)如何将Lookaround(Lookbehind)添加到此表达式中,regex,Regex,我已经写了一个正则表达式,但对如何向其中注入lookaround感到困惑 我有以下字符串: myName是myLastName 你的名字就是你的姓 我想,使用负查找,使它只匹配不包含myName的那个。在句子的开头不一定是MyNess,它可能只是在另一个较长短语的中间。到目前为止,我已经编写了以下match reg exp,它匹配了这两个句子(自然),但我想添加一个条件,使用负look back: (([a-zA-Z]*)( *)(is)( *)([a-zA-Z]*)) 如果您只是尝试匹配不
myName是myLastName
你的名字就是你的姓
我想,使用负查找,使它只匹配不包含myName的那个。在句子的开头不一定是MyNess,它可能只是在另一个较长短语的中间。到目前为止,我已经编写了以下match reg exp,它匹配了这两个句子(自然),但我想添加一个条件,使用负look back:
(([a-zA-Z]*)( *)(is)( *)([a-zA-Z]*))
如果您只是尝试匹配不包含单词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;
}
}
-起始分隔符/
-在字符串开头断言位置^
-负前瞻(?!
-按字面意思匹配字符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
如果您想使用负lookback,那么下面的正则表达式应该可以工作:
([a-zA-Z]+)(?<!\bmyName\b) +is +([a-zA-Z]+)
([a-zA-Z]+)(?
在线演示:
(?是一个否定的lookbehind,它与前面有文字字符串的单词不匹配myName
\b
用于单词边界。您不必使用正则表达式;另外,为什么空格和的捕获组是
呢?如果您澄清您试图从上面的输入中匹配的内容会更好。还有,为什么你用三种语言来标记它吗?正则表达式在不同的语言中工作不同(例如JavaScript根本不支持lookbehind)。我想添加一个负lookbehind。我是一个新手,这就是为什么你可能会看到不合逻辑的事情…我想学习负lookbehind注,这在JavaScript中不起作用(不清楚作者在使用什么)是的,true JS不支持它。