PCRE 与 U+202F 不匹配 窄无间断空间

PCRE not matching U+202F NARROW NO-BREAK SPACE

提问人:Moilleadóir 提问时间:9/8/2023 更新时间:9/8/2023 访问量:41

问:

上下文:我正在尝试使用 Sigil(epub 编辑器)替换 epub 中的一些 HTML,它可以使用 PCRE 进行搜索/替换。

我正在搜索的序列包含一个窄的不间断空间 (Unicode 0x202f)。我试过使用(文字字符)、、和。通用标记与包含常规空格的类似字符串匹配,但似乎没有与此字符匹配的字符串。\s\p{Zs}\p{Space_Separator}\p{Z}\p{Separator}\x{202f}

我可能在这里遗漏了一些明显的东西,但我不知道是什么。

我可以“轻松”解决这个问题(非正则表达式首先用其他令牌替换0x202f),但我想知道如何做到这一点,因为它可能会再次出现,如果这是程序的问题,最好知道我没有在做愚蠢的事情在接近开发人员之前。

正则表达式 PCRE

评论

1赞 Wiktor Stribiżew 9/8/2023
如果这些模式不起作用,则它不是 PCRE 引擎。好吧,你也可以尝试 ,(不换空格),但也要确保你在 HTML 中确实有一个空格,也许有类似的东西?然后尝试。\x20\xA0[[:space:]]  
2赞 bobble bubble 9/8/2023
如果使用 try with u 标志:preg_replace('/\s+/u', '', “a\xE2\x80\xAFb”)。如果它是一个 html 实体,请尝试 either 或 (在 php 中,您将使用 html_entity_decode 解码实体)。\s  
1赞 Casimir et Hippolyte 9/10/2023
Sigil 至少从两年开始使用 PCRE2 库,请务必获取最新版本。您可以在 unicode 模式切换到 on: 的情况下尝试此语法。在实践中,可能在某处有一个 Unicode 复选框,但如果在 Unicode 模式下没有要设置的内容,您可以尝试以 .\N{U+202F}(*UTF)

答: 暂无答案