java - 我如何剖析或分析这个正则表达式?

标签 java regex

我的 Java 项目中有一个正则表达式,它工作正常,但我不明白如何分析它。

允许 #*我不希望他们被允许:

 ^[^:>#*]+|([^:>#*][^>#*]+[^:>#*])$

最佳答案

让我们剖析一下正则表达式:

^[^:>#*]+|([^:>#*][^>#*]+[^:>#*])$

正则表达式是 ^[^:>#*]+([^:>#*][^>#* 之间的交替 | ]+[^:>#*])$。因此,如果字符串与 2 个正则表达式中的任何一个匹配,则该正则表达式会匹配该字符串。

如果您使用 Matcher.find() 方法,并假设没有 MULTILINE 标志:

  • ^[^:>#*]+ 匹配源字符串开头的子字符串(如果源字符串以以下字符开头)不是 :>#*

  • ([^:>#*][^>#*]+[^:>#*])$ 匹配末尾的子字符串源字符串的,如果源字符串以序列结尾:

    • :>#* 字符
    • 一个或多个非>#* 字符
    • :>#* 字符

请注意,当您将正则表达式与 Matcher.find() 一起使用时,无法保证 ^[^:>#*]+ 中字符串的结尾分支,并且无法保证 ([^:>#*][^>#*]+[^:>#*])$ 分支中字符串的开头。 Matcher.find() 只要能够找到与正则表达式匹配的子字符串,就会返回 true

<小时/>

如果您使用 Matcher.matches()String.matches(),则整个字符串必须具有以下任一模式[^:>#*]+([^:>#*][^>#*]+[^:>#*])。这意味着:

  • [^:>#*]+:字符串不得包含 :>#*,且长度必须至少为 1 个字符。

  • OR ([^:>#*][^>#*]+[^:>#*]):字符串不得包含 >, #, *;冒号 : 禁止出现在字符串的两端,并且字符串长度必须至少为 3 个字符。

如果是这种情况,那么您的正则表达式已经检查字符串中的 *#

关于java - 我如何剖析或分析这个正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16361954/

相关文章:

c# - 在 VS2010 中查找并替换双引号之间除文本以外的所有内容

java - 处理 TCP 客户端断开连接

regex - 使用正则表达式和Powershell从字符串中提取特定数据

regex - Vim 用 unicode 字符替换

regex - BASH 正则表达式匹配 - 在要匹配的括号字符列表中包括括号?

java - 计算字符串匹配的数量

java - 在 lwjgl 中制作立方体贴图

java - 如何处理大量数据?

java - 如何配置主机名解析以使用 Java 中的自定义 DNS 服务器?

java - RMI 实例化远程对象