正则表达式引擎具有"零宽度"匹配的概念,其中一些对于查找单词边缘很有用:
\b - 存在于大多数引擎中以匹配单词和非单词字符之间的任何边界\<\>- 并且- 在Vim中仅分别匹配单词开头的边界和单词的结尾处的边界.一些正则表达式引擎中的新概念是Unicode类.一个这样的类是脚本,可以区分拉丁语,希腊语,西里尔语等.这些例子都是等价的,匹配希腊语书写系统的任何字符:
\p{greek}\p{script=greek}\p{script:greek}[:script=greek:][:script:greek:]但到目前为止,在我阅读正则表达式和Unicode的来源时,我还无法确定是否有任何标准或非标准方法来实现零宽度匹配,其中一个脚本结束而另一个脚本开始.
在串????会有的之间的匹配?和?人物,就如同\b和\<会只是之前匹配?字符.
现在,对于这个例子,我可以根据寻找\p{Greek}后面的\p{Han}东西一起破解,我甚至可以根据两个Unicode脚本名称的所有可能组合来一起破解.
但这不是一个确定性的解决方案,因为每个版本仍然会在Unicode中添加新脚本.是否有一种面向未来的方式来表达这一点?或者是否有建议添加它?
regex unicode word-boundary word-boundaries character-properties