帮助特定正则表达式 - 不包含某些字符串

时间:2010-10-19 08:00:37

标签: regex regex-negation

我怎么说,在正则表达式中:

以大写字母开头的字符串的任何部分,包含至少一个空格字符,不包含字符串
" _ "(空格下划线空格),以字符串“!!!”结尾(没有引号)?

我遇到“不包含”部分的问题。

这是我到目前为止所做的:

[A-Z].* .*!!!

如何修改此项以指定“不包含'_'”?

它不需要是特定的字符串“_”。怎么说“不包含”任何字符串?例如,不包含“狗”?

编辑:我希望该解决方案与Php的“preg_replace”兼容

编辑:示例:

“_”的示例:

Abc xyz !!! < ---匹配

Hello World !!! < ---匹配

有_空间下划线空间! < ---不匹配

“狗”的例子:

真狗! < ---不匹配,(包含“狗”)

Hello World !!! < ---匹配

7 个答案:

答案 0 :(得分:2)

x(?!y)表达式只有在x后不紧跟y时才匹配[A-Z](?!%s)(.(?!%s))* (.(?!%s))*!!! 。所以,这似乎是你想要的东西:

%s

{{1}}是你禁用的字符串。

答案 1 :(得分:1)

任何可能的正则表达式都可能比两个正则表达式复杂得多。与您的一样:[A-Z].* .*!!!,第二个应用于匹配的字符串并检查是否包含_

答案 2 :(得分:0)

从任何资本开始;有一个可选的字符串,除了下划线,空格,然后是除了下划线之外的所有内容,后面跟着三个感叹号。

[A-Z][^_]*[ ][^_]*!!!

答案 3 :(得分:0)

首先测试你的字符串是否出现“_”,因为那是不匹配的。然后检查你想要的东西。

这就是我要做的事,而不是花费大量时间来为它找出一个正则表达式。

这是一个测试表达式的好网站:Nregex

编辑:我在你的问题上阅读了更多内容,看到我的回答并不是很好,所以这是另一次尝试。对上述表达式之一的修改:

[A-Z](?! _ )(\w(?! _ ))* (\w(?! _ ))*!!!

答案 4 :(得分:0)

[A-Z]([^ ]*(?! _ ) ?)*!!!

修改 我错过了至少一个空格的要求。以下正则表达式包括该要求:

[A-Z][^ ]* (?!_ )((?! _ ).)*!!!

答案 5 :(得分:0)

我曾经通过grep的{​​{1}}选项解决此问题(如果我在Linux上和/或可以使用-v)。

所以搜索一些东西,然后跳过不感兴趣的部分。

grep

没有grep(该死的窗口,没有管理员权限)但是使用Vim:

grep something <INPUT> | grep -v uninteresting

(这会打开,然后删除与您需要的不匹配的每一行,然后删除每一行,您不需要的内容,然后将结果保存为vim -c "v/i'm searching for this/d" -c "g/and don't need this/d" -c "w checkoutput" <INPUT> 。您应该检查哪一行。)

HTH

答案 6 :(得分:-1)

有一个很好的小程序,你可以在其中构建你的正则表达式并进行测试。

http://software.marioschneider-online.de/?C%23%3A_RegEx_Test