Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex (正则表达式)如何将Lookaround(Lookbehind)添加到此表达式中_Regex - Fatal编程技术网

Regex (正则表达式)如何将Lookaround(Lookbehind)添加到此表达式中

Regex (正则表达式)如何将Lookaround(Lookbehind)添加到此表达式中,regex,Regex,我已经写了一个正则表达式,但对如何向其中注入lookaround感到困惑 我有以下字符串: myName是myLastName 你的名字就是你的姓 我想,使用负查找,使它只匹配不包含myName的那个。在句子的开头不一定是MyNess,它可能只是在另一个较长短语的中间。到目前为止,我已经编写了以下match reg exp,它匹配了这两个句子(自然),但我想添加一个条件,使用负look back: (([a-zA-Z]*)( *)(is)( *)([a-zA-Z]*)) 如果您只是尝试匹配不

我已经写了一个正则表达式,但对如何向其中注入lookaround感到困惑

我有以下字符串:

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不支持它。