0

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

我尝试了以下正则表达式,它有效,但它也捕获了我不想要的空间:this\.(.*)?(?<=\s)=|(?<!\s),. 我想要做的是匹配标识符名称。我想要的一个例子,结果是这样的:

this.""W = blah;这将匹配""W。上面的第二个正则表达式几乎完美地做到了这一点,但是它也捕获了=第一组中的空间。有人可以指出我正确的方向来解决这个问题吗?

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

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

4

2 回答 2

2

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

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

对于您的第二次编辑,您似乎正在做一个语言解析器。尽管正则表达式很强大,但它们也有局限性。为此,您需要一个语法解析器。

于 2013-05-08T10:44:53.870 回答
1

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

this\.(\S*)?(?<=\s)=|(?<!\s),
于 2013-05-08T10:45:43.870 回答