2013-05-08 171 views
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。有沒有辦法來解決這個問題?再次,我不能簡單地使用[^,],因爲可能有一個名稱應該與,3$匹配的名稱,如param1.readBytes(this.,3$,0,param1.readInt());

+0

用什麼語言寫你的程序? – 2013-05-08 11:30:55

+0

所以如何判斷一個逗號是屬於this.identifier還是作爲函數參數的分隔符? – 2013-05-08 11:33:35

+0

有沒有辦法在Regex中向後讀取?例如,從';'開始並返回,直到你通過兩個'','然後開始捕獲,直到找到'this.'?或者這是不可能的...... – jduncanator 2013-05-08 11:37:28

回答

2

(.*)將匹配任何字符,包括空格。 迫使它不是空白改變它結束到(.*[^\s])

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

對於你的第二個編輯,好像你正在做一個語言解析器。即使正則表達式很強大,它們也有限制。你需要一個文法分析器。

+0

對不起,請參閱我的編輯,一個新的例子。 – jduncanator 2013-05-08 10:51:06

+0

然後試試這個'this \。(。* [^ \ s])?\ s?[=,] \ s' – 2013-05-08 10:53:05

+0

就像一個魅力!非常感謝你!編輯您的答案,我會將其標記爲正確 – jduncanator 2013-05-08 10:55:11

1

也許你可以告訴你在第一個區塊捕獲非空格字符,而不是任何。

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

對不起,我會更新我的問題,字段名稱中可以包含空格,這是不行的。 – jduncanator 2013-05-08 10:47:09