我正在编写XML模式,需要阻止元素的文本匹配某些值.(例如,variableName元素不能匹配'int','byte','string'等)
我尝试使用类似于"^(int | byte | string)"的模式元素的限制,但没有成功.
你知道格式化正则表达式的方法,还是其他任何方法来使它工作?
在三重检查之后,XML Schema(XSD)正则表达式确实不支持使这项任务变得容易的任何功能(特别是前瞻和锚点),我提出了一种似乎有用的方法.我使用自由间距模式使其更容易阅读,但这是XSD风格不支持的另一个功能.
[^ibs].* |
i(.{0,1} | [^n].* | n[^t].* | nt.+) |
b(.{0,2} | [^y].* | y[^t].* | yt[^e].* | yte.+) |
s(.{0,4} | [^t].* | t[^r].* | tr[^i].* | tri[^n].* | trin[^g].* | tring.+)
Run Code Online (Sandbox Code Playgroud)
第一个选项匹配任何不以任何关键字的首字母开头的内容.每个其他顶级备选项都匹配一个以与其中一个关键字相同的字母开头的字符串,但是:
需要注意的是XSD的正则表达式不支持显式锚(即^,$,\A,\z),但所有的比赛都在两端锚含蓄.
我可以看到一个潜在的问题:如果关键字列表很长,你可能会遇到正则表达式的绝对长度限制.