2017-07-29 26 views
0

如果有人能解釋如何解釋下面的正則表達式,我將不勝感激;它是從供Namespaces in XML 1.0 W3C的參考,並且限定的NCName([4])爲:如何解釋正則表達式減法與分組

名稱 - (字符* ':' 字符*)/ *的XML名稱,減去 「:」 */

[AZ-[aeiuo]]代表所有輔音(見http://www.regular-expressions.info/charclasssubtract.html)的列表,而不是在應用到一組(道歉,如果這是錯誤的:

當施加到列表,如我可以理解減法如上所示。

該評論指出我應該如何解釋正則表達式,但我很掙扎;爲什麼不乾脆:

  Name - (':') 

如果目的是NCName來爲Name減「:」那爲什麼兩邊所需的零個或多個字符(我不要求一個單獨的問題,只是表明我的混亂區)?

請提前接受我的感謝。

+1

這不是'regex',它是[BNF Notation](https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form)。該符號也在[您在參考的文檔](https://www.w3.org/TR/REC-xml/#sec-notation)中解釋。 – axiac

回答

1

W3C發佈的文檔使用EBNF Notation的變體來描述由它們標準化的語言。
它在XML Recommendation的部分"6 Notation"中描述。

您發佈的例子:

NCName ::= Name - (Char* ':' Char*) /* An XML Name, minus the ":" */ 

如何閱讀:

  • NCName是由規則所描述的對象;
  • ::=用描述它的表達式(在右邊)分隔描述對象的名稱(在左邊);
  • Name是已經由another rule描述的一個對象;
  • -是除符號外; A - B in EBNF表示「匹配A,但不匹配B」;
  • (...) - 圓括號創建一個組;他們讓內部的表達表現爲一個單一的項目;
  • Charanother rule已在文檔中描述的另一個對象;它基本上意味着一個Unicode字符;
  • * - 重複,匹配前一項零次或多次;
  • ':' - 單引號或雙引號中的字符串是字符串文字;它代表自己;這裏是冒號字符;

放在一起,就意味着NCNameName不包含:

該評論似乎不正確(或者它可能是錯誤的措詞)。

+0

非常有幫助;非常感謝你! – CAnder

+0

爲了限定這個答案,所使用的EBNF的方言在XML建議書的第6節中定義,並且在許多細節上與所引用的維基百科文章中描述的符號不同。 EBNF有許多方言在使用。 –

+0

@MichaelKay當然是在XML建議書中定義的。當我寫出答案時,我把它放在眼前。我以爲我把它的鏈接到答案中,但似乎我忘了。謝謝你提到它。 – axiac