繁体   English   中英

正则表达式-字符串中任何地方都不包含某个字符串

[英]Regular expression - does not contain a certain string anywhere within a string

我希望这不是重复的,我一直在搜索reg ex答案几个小时,所以我不这么认为!

有没有一种使用正则表达式进行搜索的方式,说结果在字符串的任何地方都不能包含单词“ bot”?

我在其他地方使用否定前瞻,但问题是我不知道“机器人”一词可能出现在哪里。 它可能是一个较长单词的一部分,可能出现在开头,结尾或两者都出现! 我想包括与表达式其余部分匹配的结果,但也要排除“ bot”。

这是我当前的搜索表达式:

2017-0[2-5] (.*) (UserInfo.aspx UID=111 80 -)=(?!10. *)+. * 

我搜索的结果通常如下所示:

2017-02-16 15:56:00 10.3.1.17 GET /UserInfo.aspx UID=111 80 - 157.85.39.17 Mozilla/5.0+(compatible;+bingbot/2.0;++http://www.bing.com/bingbot.htm) 200 0 0 390

理想情况下,我希望将此结果排除在外,因为它包含“ bot”,即使它仍与RegEx的第一部分匹配。

如果可能,将其实施为两步过程。 例如,如果这是在脚本中,则要进行两项检查:一项检查行是否包含bot,然后进行第二步(如果没有bot,则执行现有的正则表达式)。

将复杂的匹配要求分解为多个测试通常是一个好主意。 这样可以使代码更清晰,并且效率也可能更高,尤其是在早期检查很简单的情况下。

分开进行此步骤还可以使您使用更简单的正匹配而不是负匹配。

伪代码示例:

if (!string.contains('/bot/') and string.contains('/yourpatternhere/'))
{
    do stuff
}

如果您只限于一个正则表达式,只需在字符串开头使用负前瞻:

(?!^.*bot)2017-0[2-5] (.*) (UserInfo.aspx UID=111 80 -)=(?!10. *)+. * 

(我在这里忽略了正则表达式的任何其他可能的问题,这似乎不太正确...)

暂无
暂无

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

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