当前位置: 首页 > 面试题库 >

在Java XML解析器的Saxon 9中,无法识别正则表达式中的单词边界(\ b)

羊慈
2023-03-14
问题内容

我有以下简单的正则表达式:

\b\w+\b

撒克逊人报告以下错误:

syntax error at char 2 in regular expression: Escape character 'b' not allowed

这是否意味着我不能在Java Saxon解析器中使用单词边界?是否有替代的免费XML Java解析器具有此功能?


问题答案:

XSD和XPath中使用的正则表达式方言不能识别\
b(作为单词边界或作为退格键)。我认为,排除它的原因可能是由于单词边界取决于语言/文化而引起的焦虑,尽管这是不合逻辑的,因为方言确实支持\
w(单词字符),并且单词边界可以简单地定义为匹配\
w的字符和不匹配的字符。另外,XSD团队可能已经担心零长度匹配会引起的歧义,这是臭名昭著的bug来源,并且很难精确地精确指定正则表达式的作用。


因此,这不是Saxon的限制,而是XPath规范中写入的限制。

如果您不太担心标准一致性,则可以使用Saxon标记“!”。在“标志”参数的末尾表示您的正则表达式是Java正则表达式,而不是XPath正则表达式。



 类似资料:
  • 问题内容: 我想在Elastisearch中使用单词边界进行正则表达式查询,但是看起来Lucene正则表达式引擎不支持。我可以使用哪些解决方法? 问题答案: 在ElasticSearch regex风格中,没有直接等效于单词边界的功能。最初是一样的东西,如果用一个字字符开始,并且尾部就像如果用一个字字符结束。 因此,我们需要确保在字符串的前后或字符串的开始/结束处有一个非单词char 。由于正则表

  • 我正在使用以下正则表达式: 我的目标是只验证数字(int和decimal),空格, ( ), 点,AND,OR。其他一切都是不允许的。它看起来像是工作的,但是我对单词边界\bAND\b和\bOR\b Eg有问题。我不能输入ANDWE或EEE或任何组合,但我能做的是AN或A。如何在字符串中只允许两个单词AND或OR?它们在字符串中是可选的。 输入示例 0.10和23-有效 12和(15或0.2)-有

  • 问题内容: 我目前正在编写一个用于匹配内容中特定单词的库。 本质上,它的工作方式是将单词编译为正则表达式,然后通过所述正则表达式运行内容。 我要添加的功能是指定要匹配的给定单词是否必须以单词开头和/或结尾。例如,我有这个词。我指定它 必须开始一个字 ,因此将 匹配 的是在开始,但 不能匹配 为不启动的话。 我想使用单词边界来执行此操作,但是在进行一些测试时,我发现它无法正常运行。 采取以下措施,

  • 问题内容: 在尝试学习更多有关正则表达式的知识时,一个教程建议你可以使用b来匹配单词边界。但是,Python解释器中的以下代码片段无法按预期工作: 如果有任何匹配项,它应该是一个匹配对象,但它是。 不支持该表达式吗?还是我使用错误? 问题答案: 你为什么不尝试 输出: 还忘了提及,你应该在代码中使用原始字符串

  • 我正在尝试抓取模式中第一个连字符之后的文本 但在此模式中: 我希望它跳过‘不想要的’文本,并匹配的文本后面的下一个连字符(DesiredText)。我创建了一个具有两种模式regex101,并需要修改我的基本regex,以便如果中存在一个或多个我不想匹配的单词,那么它将匹配第二个连字符文本: https://regex101.com/r/vesqh3/1

  • 问题内容: 在JavaScript中: 正确地给我: 当我使用utf-8字符时: 在字边界运营商似乎没有工作时: 这个问题有方法解决吗? 问题答案: 仅当一个单词字符之前或之后没有另一个单词字符(因此等于和)时,单词边界声明才匹配。并且定义为。因此与希腊字符不匹配。因此,您不能在这种情况下使用。 相反,您可以使用以下方法: