我正在尝试找出一种可以找到XML中所有无效字符的方法。根据W3 recommendation的说法,以下是XML中的有效字符:
#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
将其转换为小数:
9
10
13
32-55295
57344-65533
65536-1114111
是有效的xml字符。
我正在尝试使用适当的正则表达式在notepad++中搜索无效字符。
来自我的XML的一段代码:
<custom-attribute attribute-id="isContendFeed">fal  se</custom-attribute>
<custom-attribute attribute-id="pageNoFollow">fal  se</custom-attribute>
<custom-attribute attribute-id="pageNoIndex">fal se</custom-attribute>
<custom-attribute attribute-id="rrRecommendable">false</custom-attribute>
在上面的例子中,我希望我的正则表达式为我找到
和
,因为它们在XML中是不允许的。
我无法为此构造正则表达式。
我为数字范围创建的正则表达式:
32-55295 : (3[2-9]|[4-9][0-9]|[1-9][0-9]{2,3}|[1-4][0-9]{4}|5[0-4][0-9]{3}|55[01][0-9]{2}|552[0-8][0-9]|5529[0-5])
57344-65533 : (5734[4-9]|573[5-9][0-9]|57[4-9][0-9]{2}|5[89][0-9]{3}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-3])
65536-1114111 : (6(5(5(3[6-9]|[4-9][0-9])|[6-9][0-9]{2})|[6-9][0-9]{3})|[7-9][0-9]{4}|[1-9][0-9]{5}|1(0[0-9]{5}|1(0[0-9]{4}|1([0-3][0-9]{3}|4(0[0-9]{2}|1(0[0-9]|1[01])))))))
如果单独使用,这些正则表达式可以正常工作,但我无法创建完整的正则表达式。
除了正则表达式之外,还有没有其他方法可以找到无效字符?如果没有,请帮助我构造正则表达式,它可以找到我的XML中存在的无效字符。
发布于 2015-05-14 23:14:25
首先,文字文本
在xml中是允许的-不允许(如果列表是正确的)是带有ascii-code 3的字符。
第二。大多数正则表达式允许搜索可以用\x00
(两个十六进制数字)和\u0000
(四个十六进制数字)定义的字符。有些口味允许像\x{...}
这样的东西--但它因口味而异……
我们先从
[^\x09\x0A\x0D\x20-\uD7FF\uE000-\uFFFD]
[^]
定义了一组否定的字符和字符范围(等等)。只需用所有允许的字符和范围填充即可。
如果您的风格理解\x{}
,那么它很容易扩展。
[^\x09\x0A\x0D\x20-\uD7FF\uE000-\uFFFD\x{10000}-\x{10FFFF}]
否则,您必须逐个字符搜索surrogate pairs字符...
\x{10000}
与\uD800\uDC00
相同
\x{10FFFF}
与\uDBFF\uDFFF
相同
这不是一套就能做到的。不好玩;)这有点像否定版的
[\uD800-\uDBFF][\uDC00-\uDFFF]|
[\uD800-\uDBFF](?![\uDC00-\uDFFF])|
(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]
(来自https://mathiasbynens.be/notes/javascript-unicode#matching-code-points)
https://stackoverflow.com/questions/30229701
复制相似问题