5

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

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

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

这是我到目前为止所拥有的:

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

如何修改它以同时指定“不包含'_'”?

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

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

编辑:示例:

“_”的例子:

abc xyz!!!<---匹配

你好世界!!!<---匹配

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

“狗”的例子:

什么狗啊!!!<--- 不匹配,(包含“狗”)

你好世界!!!<--- 匹配

4

7 回答 7

2

x(?!y)表达式仅在x其后不紧跟 时才匹配y。所以,这似乎是你想要的东西:

[A-Z](?!%s)(.(?!%s))* (.(?!%s))*!!!

%s你的禁止字符串在哪里。

于 2010-10-19T08:39:30.190 回答
1

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

于 2010-10-19T08:04:29.600 回答
0

我曾经通过grep's-v选项解决它(如果我在 Linux 上和/或可以使用grep)。

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

grep something <INPUT> | grep -v uninteresting

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

vim -c "v/i'm searching for this/d" -c "g/and don't need this/d" -c "w checkoutput" <INPUT>

(这会打开 ,然后删除与您需要的不匹配的每一行,然后删除不需要的每一行,然后将结果另存为checkoutput。您应该检查一下。)

高温高压

于 2010-10-19T09:17:55.063 回答
0

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

[A-Z][^_]*[ ][^_]*!!!
于 2010-10-19T08:04:33.570 回答
0

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

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

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

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

[A-Z](?! _ )(\w(?! _ ))* (\w(?! _ ))*!!!
于 2010-10-19T08:35:59.823 回答
0
[A-Z]([^ ]*(?! _ ) ?)*!!!

编辑:我错过了您对至少一个空间的要求。以下正则表达式包括该要求:

[A-Z][^ ]* (?!_ )((?! _ ).)*!!!
于 2010-10-19T08:43:08.183 回答
-1

有一个不错的小程序,您可以在其中构建您的正则表达式并对其进行测试。

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

于 2010-10-19T08:13:41.670 回答