「/ *」[^ * /] * 「* /」爲什麼這個評論正則表達式錯了?
它相匹配的第一/ *然後它等待除* /任何字符,然後當它得到的* /它會匹配整個正則表達式,用於鑽例如此評論:
/*布魯諾/布拉加*/
有人能告訴我爲什麼/不匹配? 謝謝。
「/ *」[^ * /] * 「* /」爲什麼這個評論正則表達式錯了?
它相匹配的第一/ *然後它等待除* /任何字符,然後當它得到的* /它會匹配整個正則表達式,用於鑽例如此評論:
/*布魯諾/布拉加*/
有人能告訴我爲什麼/不匹配? 謝謝。
爲什麼這個評論正則表達式錯了?
這是由於與正則表達式的幾個問題:
"
裏面[^]
它在它否定了一切,在你的例子中,它會消除空間,因爲你已經包含了它。此外,字符/
存在於輸入字符串的中間,你可能想要禁止它,只有當它在*
後面的「結束評論「 - */
。*
是一個特殊字符,應該逃脫。這同樣適用於/
/*
之後的空間(輸入字符串/*bruno...
不包含這樣的一個空間)* /
總結以上各點,正則表達式應更正爲:
\/\*[^\*]*\*\/
見DEMO
在路易斯的評論跟進:如果你想允許裏面的評論*
符號,你可以使用:
\/\*(.*?)\*\/
見DEMO
@LuisColorado是真的,但沒有這樣的要求。如果OP認爲一個'*'符號很可能是評論的一部分 - 這個要求應該加入到這個問題:) – alfasin
但是這應該是他希望得到一個正確的答案,而不是再次處理這個問題看到包含'*'使整個匹配字符串無效。即使它沒有被指定爲這樣,C語言註釋允許在裏面放入'*'字符。 –
該編輯將使其接受'/ * bla bla *// * bla bla * /'作爲整體評論,而不是兩個評論之間有空格。看看我的解決方案,因爲我也回答了這個問題。 –
正確的正則表達式匹配評論(允許除*/
序列之外的所有內容,必須先允許除*
或*
之外的任何字符,然後是除之外的任何字符,所以
/\*([^\*]|\*[^/])*\*/
應該做的工作(記住,在示範正則表達式的分隔符/
所以他們用反斜槓逃脫,也許你將不得不做,在你的代碼逃脫。
恕我直言,你忘了'*'是一個特殊字符,必須轉義以匹配文字。嘗試使用'/ \ *(?:(?!\ */|/\ *)[\ s \ S])* \ * /',或者更簡單'/ \ * [\ s \ S] *?\ */'。如果您在評論中沒有換行符號,請嘗試使用'/\*.*?\/''。 –
如果有任何正則表達式適合您,請讓我知道。 –