我目前有这个正则表达式: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$
匹配。
答案 0 :(得分:2)
(.*)
将匹配任何字符,包括空格。
要强制它不以空格结尾,请将其更改为(.*[^\s])
例如:
this\.(.*[^\s])?\s?[=,]\s
对于第二次编辑,您似乎正在使用语言解析器。即使正则表达式很强大,它们也有限制。你需要一个语法分析器。
答案 1 :(得分:1)
也许你可以在你的第一个区块中捕获非空格字符,而不是任何字符。
this\.(\S*)?(?<=\s)=|(?<!\s),