2014-03-03 107 views
0

正則表達式爲什麼這個正則表達式匹配任何

\\(?:[[email protected]]+|.) 

用於乳膠語法高亮TEXworks的。

爲什麼此表達式與\之外的任何內容相匹配?據我所知,前瞻不匹配任何東西(只檢查條件是否爲真)。該表達式用於匹配通常爲\command的Latex命令,但在正則表達式中也有特殊字符\%,\|,...,因此.

有人可以解釋爲什麼嗎?

+2

'(?:...)'不是前瞻。這是一個非捕獲組。 – Jerry

回答

2

?:是一個非捕獲組。 ?=是一個前瞻。 (?:)的原因是,|適用於[[email protected]].。如果沒有(?:)|將適用於\\[[email protected]].。這將匹配任何字符串(因爲.將始終匹配),而不僅僅是具有\的字符串(關於匹配的更多詳細信息如下)。由於這只是一個邏輯分組來指定|的範圍,因此不需要保留捕獲組,這就是爲什麼使用?:的原因。

望着正則表達式:

\\手段開始與\匹配。現在,該字符串不需要以\來匹配。正則表達式將匹配\abc,但它也將匹配字符串a\abc,在這兩種情況下匹配結果將爲\abc

[[email protected]]+ - +表示一個或多個。所以它匹配[]中的一個或多個字符。這意味着字符串如\a\abc,\[email protected]將匹配

|表示OR。

.是任何單個字符(默認情況下不是新行)。這意味着字符串如\a\#,\,將匹配。所以\之後的第一個字符可以是任何字符,但是如果它不匹配[[email protected]]+那麼匹配只會匹配第一個字符。例如\#a只會匹配\#

匹配,其中匹配結果突出顯示的實例:

這將不匹配(注意,如果 (?:)移除這些字符串會匹配)的字符串210個

例子

  • \
  • ABCABC
+0

它用於語法高亮顯示。 Latex命令有這個語法。 – ratatosk

+0

@ratatosk,我更想知道什麼類型的語法會突出顯示,你能用一些例子更新你的答案嗎? – acarlon

+0

@ratatosk - 如果有幫助,請參閱更新的示例。 – acarlon

2

在給定的正則表達式,

\\(?:[[email protected]]+|.) 

()是一組操作符。正則表達式將組運算符內的條目視爲一個單位。

所以正則表達式接受等,

\.\|\a等。

而且正則表達式將不接受\作爲這樣的字符串。

+0

單元在這裏意味着什麼?這只是爲了表現還是改變了行爲(這裏)。我找到了將選項插入到該組中的方法,這很有道理,但由於這裏沒有選項,此表達式與「\\ [A-Za-z @] + |。」是否有所不同? – ratatosk

1

模式只會匹配\和任何直接跟隨它的字符。

  1. 的模式匹配字符\字面上
  2. 接下來你有一個非捕獲組(?:[[email protected]]+|.)
  3. 你也有另一組這.匹配任何字符(除換行符)。

有沒有前瞻,here's a list of expressions作爲參考。

enter image description here

相關問題