0
我想獲得有限的域名工作的語法。語法在http://tools.ietf.org/html/rfc1035的2.3.1節定義。它的一個子集是根據python parsley - 域名的語法
<label> ::= <letter> [ [ <ldh-str> ] <let-dig> ]
<ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
<let-dig-hyp> ::= <let-dig> | "-"
<let-dig> ::= <letter> | <digit>
<letter> ::= any one of the 52 alphabetic characters A through Z in upper case and a through z in lower case
<digit> ::= any one of the ten digits 0 through 9
我下面的嘗試。我想匹配label
from parsley import makeGrammar
import ometa
domain = makeGrammar('''
letdighyp = (letterOrDigit|-)
label = letterOrDigit letdighyp+ letterOrDigit
''', {})
tests = ('abcd1000',)
for t in tests:
try:
print domain(t).label()
except ometa.runtime.ParseError as e:
print 'parse failed for', t
print e
運行,讓我
parse failed for abcd1000
abcd1000
^
Parse error at line 2, column 0: expected EOF. trail: [digit letdig letdighyp]
我在做什麼錯?
P.S.
label = letterOrDigit letdighyp+ letterOrDigit
是我無法工作的線路。如果最後一個letterOrDigit不在那裏,它匹配字符串。
這是行不通的。該語法指定標籤必須以letterOrDigit開頭和結尾。連字符只允許排除這些位置。 – kkrs
我給了一個去,並認爲我知道了。看到我更新的答案。 –
該語法還解析了什麼應該是一個錯誤,說'a-'。 'python domain.py abcd1000 a-' – kkrs