正则表达式中 Java 的 \w 和 \b 的 Unicode 等效项是什么?
Java 正则表达式中 w 和 b 的 Unicode 等效项?
与其他表达式相比,Java 正则表达式的字符类简写(w 和 b)有限现代正则表达式实现。在Java中,w仅匹配[A-Za-z0-9_],限制了单词匹配能力。此外,b 的词边界语义偏离了 w 和 Unicode 的定义。
Unicode 感知等效项
幸运的是,已经开发了自定义 Unicode 感知等效项来克服这些限制。以下是替换内容:
\s: [\u0009-\u000D\u0020\u0085\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000] \S: [^\u0009-\u000D\u0020\u0085\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000] \v: [\u000A-\u000D\u0085\u2028\u2029] \V: [^\u000A-\u000D\u0085\u2028\u2029] \h: [\u0009\u0020\u00A0\u1680\u180E\u2000-\u200A\u202F\u205F\u3000] \H: [^\u0009\u0020\u00A0\u1680\u180E\u2000-\u200A\u202F\u205F\u3000] \w: [\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\p{So}]] \W: [^\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\p{So}]] \b: (?:(?<=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\p{So}]])(?![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\p{So}]])|(?<![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\p{So}]])(?=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\p{So}]])) \B: (?:(?<=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\p{So}]])(?=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\p{So}]])|(?<![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\p{So}]])(?![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\p{So}]])) \d: \p{Nd} \D: \P{Nd} \R: (?:(?>\u000D\u000A)|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]) \X: (?>\PM\pM*)
理解边界(b 和 B)
边界匹配单词字符转换为非单词字符的位置,反之亦然。边界定义为:
IF follows word THEN doesn't precede word ELSIF doesn't follow word THEN does precede word
转换为正则表达式语法:
(?:(?<=\w)(?!\w)|(?<!\w)(?=\w))
同样,非边界 (B) 等效项为:
(?:(?<=\w)(?=\w)|(?<!\w)(?!\w))
在 Java 中加入 Unicode 支持
至将这些 Unicode 等效项合并到 Java 正则表达式中,您可以在编译之前使用字符串重写函数来转换模式。以下是使用名为 rewrite 的自定义函数的示例:
String rewrittenPattern = rewrite(originalPattern); Pattern compiledPattern = Pattern.compile(rewrittenPattern);
以上是正则表达式中 Java 的 \w 和 \b 的 Unicode 等效项是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undress AI Tool
免费脱衣服图片

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Stock Market GPT
人工智能驱动投资研究,做出更明智的决策

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

使用-cp参数可将JAR加入类路径,使JVM能加载其内类与资源,如java-cplibrary.jarcom.example.Main,支持多JAR用分号或冒号分隔,也可通过CLASSPATH环境变量或MANIFEST.MF配置。

UseFile.createNewFile()tocreateafileonlyifitdoesn’texist,avoidingoverwriting;2.PreferFiles.createFile()fromNIO.2formodern,safefilecreationthatfailsifthefileexists;3.UseFileWriterorPrintWriterwhencreatingandimmediatelywritingcontent,withFileWriterover

JavaSPI是JDK内置的服务发现机制,通过ServiceLoader实现面向接口的动态扩展。1.定义服务接口并在META-INF/services/下创建以接口全名为名的文件,写入实现类全限定名;2.使用ServiceLoader.load()加载实现类,JVM会自动读取配置并实例化;3.设计时应明确接口契约、支持优先级与条件加载、提供默认实现;4.应用场景包括多支付渠道接入和插件化校验器;5.注意性能、类路径、异常隔离、线程安全和版本兼容性;6.在Java9 可结合模块系统使用provid

Javagenericsprovidecompile-timetypesafetyandeliminatecastingbyallowingtypeparametersonclasses,interfaces,andmethods;wildcards(?,?extendsType,?superType)handleunknowntypeswithflexibility.1.UseunboundedwildcardwhentypeisirrelevantandonlyreadingasObject

使用implements关键字实现接口,类需提供接口中所有方法的具体实现,支持多接口时用逗号分隔,确保方法为public,Java8后默认和静态方法无需重写。

本文深入探讨了在同一TCP Socket上发送多个HTTP请求的机制,即HTTP持久连接(Keep-Alive)。文章澄清了HTTP/1.x与HTTP/2协议的区别,强调了服务器端对持久连接支持的重要性,以及如何正确处理Connection: close响应头。通过分析常见错误和提供最佳实践,旨在帮助开发者构建高效且健壮的HTTP客户端。

本教程详细介绍了在Java中如何高效地处理包含其他ArrayList的嵌套ArrayList,并将其所有内部元素合并到一个单一的数组中。文章将通过Java 8 Stream API的flatMap操作,提供两种核心解决方案:先扁平化为列表再填充数组,以及直接创建新数组,以满足不同场景的需求。

使用Properties类可轻松读取Java配置文件。1.将config.properties放入资源目录,通过getClassLoader().getResourceAsStream()加载并调用load()方法读取数据库配置。2.若文件在外部路径,使用FileInputStream加载。3.使用getProperty(key,defaultValue)处理缺失键并提供默认值,确保异常处理和输入验证。
