21

嗨,我对正则表达式几乎是新手......所以,也许我的问题很简单,但我找不到解决方案!

我正在编写一个正则表达式模式,它查看用户的写作并用另一种颜色绘制所建立的匹配项。例如,如果用户写这样的东西,我想用另一种颜色绘画:

foo()

问题是我不想画如果用户在那之后写别的东西,我的意思是如果用户只写

"foo()" (or "foo() ")

那么没关系,我想画它,但是如果用户写

"foo()d" 

我不想画那个,因为现在为我写得很好。

我已经编写了与“foo()”匹配的正则表达式模式(或者中间也有一个点,比如“foo.foo()”),但我正面临这个问题。我需要在我的模式中添加一些东西,只允许一个空格,或者什么都没有(如果用户在“)”之后写了其他东西我不想匹配它。)这是我的模式:

[a-z]*\.?[a-z]*\(("[^"\r\n]*"|[-]?\b\d+[\.]?\d*\b)?\)

非常感谢你!

4

5 回答 5

19

David Brabant 很接近,但我认为您实际上想尝试使用结束正则表达式(?!\S)- 这意味着您将匹配任何后面没有非空白字符的内容。如果您只想匹配空格而不是空格,请使用(?![^ ]).

于 2012-04-18T15:10:00.463 回答
6

使用负面展望:

(\w+)(\.*)(\(\))+(\s)*(?!.)

在上面的正则表达式中对您来说重要的部分是: (\s)*(?!.)

(\s)* : 后跟 0 个或多个空格 (?!.) : 没有其他字符

于 2012-04-18T15:03:49.927 回答
1
[a-z]*\.?[a-z]*\(("[^"\r\n]*"|[-]?\b\d+[\.]?\d*\b)?\)[ ]?

添加一个[ ]?应该做到这一点。?用于1or 0[ ]只会匹配空格。

此外,[\s]?适用于所有类型的空白(包括选项卡)。

于 2012-04-18T14:57:37.727 回答
0

根据我的正则表达式测试器,这似乎符合您的要求:

[a-z]*\.?[a-z]*\(("[^"\r\n]*"|[-]?\b\d+[\.]?\d*\b)?\)([ ]?)(?!.)

如果要允许多个空间,请使用以下命令:

[a-z]*\.?[a-z]*\(("[^"\r\n]*"|[-]?\b\d+[\.]?\d*\b)?\)([ ]*)(?!.)
于 2012-04-18T15:00:56.270 回答
0

你可以尝试添加:

\s*% ?

\s* : 零个或多个空格

% 表示:字符串结束

于 2012-04-18T15:07:14.740 回答