首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XML中无效字符的正则表达式

XML中无效字符的正则表达式
EN

Stack Overflow用户
提问于 2015-05-14 13:11:11
回答 1查看 2K关注 0票数 4

我正在尝试找出一种可以找到XML中所有无效字符的方法。根据W3 recommendation的说法,以下是XML中的有效字符:

代码语言:javascript
运行
复制
#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

将其转换为小数:

代码语言:javascript
运行
复制
9
10
13
32-55295
57344-65533
65536-1114111

是有效的xml字符。

我正在尝试使用适当的正则表达式在notepad++中搜索无效字符。

来自我的XML的一段代码:

代码语言:javascript
运行
复制
        <custom-attribute attribute-id="isContendFeed">fal &#11; se</custom-attribute>
        <custom-attribute attribute-id="pageNoFollow">fal &#3; se</custom-attribute>
        <custom-attribute attribute-id="pageNoIndex">fal &#13; se</custom-attribute>
        <custom-attribute attribute-id="rrRecommendable">false</custom-attribute>

在上面的例子中,我希望我的正则表达式为我找到&#11;&#3;,因为它们在XML中是不允许的。

我无法为此构造正则表达式。

我为数字范围创建的正则表达式:

代码语言:javascript
运行
复制
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中存在的无效字符。

EN

回答 1

Stack Overflow用户

发布于 2015-05-14 23:14:25

首先,文字文本&#3;在xml中是允许的-不允许(如果列表是正确的)是带有ascii-code 3的字符。

第二。大多数正则表达式允许搜索可以用\x00 (两个十六进制数字)和\u0000 (四个十六进制数字)定义的字符。有些口味允许像\x{...}这样的东西--但它因口味而异……

我们先从

[^\x09\x0A\x0D\x20-\uD7FF\uE000-\uFFFD]

[^]定义了一组否定的字符和字符范围(等等)。只需用所有允许的字符和范围填充即可。

如果您的风格理解\x{},那么它很容易扩展。

代码语言:javascript
运行
复制
[^\x09\x0A\x0D\x20-\uD7FF\uE000-\uFFFD\x{10000}-\x{10FFFF}]

否则,您必须逐个字符搜索surrogate pairs字符...

\x{10000}\uD800\uDC00相同

\x{10FFFF}\uDBFF\uDFFF相同

这不是一套就能做到的。不好玩;)这有点像否定版的

代码语言:javascript
运行
复制
[\uD800-\uDBFF][\uDC00-\uDFFF]|
[\uD800-\uDBFF](?![\uDC00-\uDFFF])|
(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]

(来自https://mathiasbynens.be/notes/javascript-unicode#matching-code-points)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30229701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档