需要得到一个 PHP 正则表达式来匹配除指定语法之外的任何内容(负先行似乎不起作用?)
Need to get a PHP Regex that will match anything other than the syntax specified (negative look-ahead doesn't seem to be working?)
我想通过配置文件进行解析,以查找本地配置的用户,而不是使用用户名 'networks' 配置的用户。因此,例如,如果我的配置文件如下所示:
username networks
blah blah blah
username banana
blah blah blah
我要取货username banana
我试过^username (?!networks)
没有影响
我查看了 PHP assertions manual,我认为这条线为我指明了正确的方向...
例如,\w+(?=;)
匹配后跟分号的单词,但不包括匹配中的分号,而 foo(?!bar)
匹配任何出现的 "foo" 后面没有 "bar"
所以在我的例子中,我正在寻找任何出现的 username
后面没有跟 networks
看起来很简单但行不通?
这是我的 RegEx101 Attempt
试试下面的正则表达式:
^username ((?!networks)\w+)
请注意,在您删除演示中的拼写错误(RegEx 后的换行符)后,它确实有效,但不会捕获用户名。如果要捕获整行,请将整个 RegEx 括起来,不包括 ^
工作原理:
^ # String starts with ...
username # (username )
( # Capture Username
(?!networks) # Do not capture if it is networks
\w+ # Letter one one more times (the username)
)
我想通过配置文件进行解析,以查找本地配置的用户,而不是使用用户名 'networks' 配置的用户。因此,例如,如果我的配置文件如下所示:
username networks
blah blah blah
username banana
blah blah blah
我要取货username banana
我试过^username (?!networks)
没有影响
我查看了 PHP assertions manual,我认为这条线为我指明了正确的方向...
例如,\w+(?=;)
匹配后跟分号的单词,但不包括匹配中的分号,而 foo(?!bar)
匹配任何出现的 "foo" 后面没有 "bar"
所以在我的例子中,我正在寻找任何出现的 username
后面没有跟 networks
看起来很简单但行不通?
这是我的 RegEx101 Attempt
试试下面的正则表达式:
^username ((?!networks)\w+)
请注意,在您删除演示中的拼写错误(RegEx 后的换行符)后,它确实有效,但不会捕获用户名。如果要捕获整行,请将整个 RegEx 括起来,不包括 ^
工作原理:
^ # String starts with ...
username # (username )
( # Capture Username
(?!networks) # Do not capture if it is networks
\w+ # Letter one one more times (the username)
)