贪婪和非贪婪的正则表达

时间:2013-05-08 10:41:50

标签: regex

我目前有这个正则表达式:this\.(.*)?\s[=,]\s,但是我遇到了一个我无法修复的泡菜。

我尝试了以下正常使用的Regex,但它也捕获了我不想要的空间:this\.(.*)?(?<=\s)=|(?<!\s),。我要做的是匹配标识符名称。我想要的一个例子和结果是:

匹配this.""W = blah;

""W。上面的第二个正则表达式几乎完美,但它也捕获了第一组=之前的空间。有人能指出我正确的方向来解决这个问题吗?

编辑:不在通配符组中简单地使用[^\s]的原因是有时我可以得到这样的行:this. "$ = blah;

EDIT2:现在我有另一个问题。它不匹配像param1.readBytes(this.=!3,0,param1.readInt());这样的行。而不是匹配=!3匹配的=!3,0。有没有办法来解决这个问题?同样,我不能简单地使用[^,],因为可能会有param1.readBytes(this.,3$,0,param1.readInt());这样的名称与,3$匹配。

2 个答案:

答案 0 :(得分:2)

(.*)将匹配任何字符,包括空格。 要强制它不以空格结尾,请将其更改为(.*[^\s])

例如: this\.(.*[^\s])?\s?[=,]\s

对于第二次编辑,您似乎正在使用语言解析器。即使正则表达式很强大,它们也有限制。你需要一个语法分析器。

答案 1 :(得分:1)

也许你可以在你的第一个区块中捕获非空格字符,而不是任何字符。

this\.(\S*)?(?<=\s)=|(?<!\s),