java - 英国邮政编码的正则表达式也匹配 UUID

标签 java regex

我在使用以下英国邮政编码正则表达式时遇到问题

([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\s?[0-9][A-Za-z]{2})

它适用于预期的英国邮政编码,例如

AB11AB

但是,它似乎也匹配 UUID,例如

c25d4f64-2336-4a5d-b94c-14dc12xxxa58

有没有办法忽略正则表达式中的 UUID?

请在此处查找示例

https://regex101.com/r/dI6gD9/19

最佳答案

选项 1

也许,我们只需添加开始和结束 anchor 并使 UUID 失败,然后将捕获组更改为非,如果可以的话:

^(?:[Gg][Ii][Rr]\s+0[Aa]{2})|(?:(?:([A-Za-z][0-9]{1,2})|(?:(?:[A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(?:(?:[A-Za-z][0-9][A-Za-z])|(?:[A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\s*[0-9][A-Za-z]{2})$

表达式很可能会被简化(例如,非捕获组),我还添加了额外的空格,以防万一。

DEMO 1


选项 2

另一种选择是添加单词边界,然后它几乎不可能匹配我们数据中的 UUID,我猜,我们还可以添加一个 i 标志:

(?i)(?:\bgir\b\s+\b0a{2}\b)|\b(?:[a-z][0-9]{1,2}|[a-z][a-hj-y][0-9]{1,2}|[a-z][0-9][a-z]|[a-z][a-hj-y][0-9][a-z]?)\s*[0-9][a-z]{2}\b

DEMO 2

测试

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "^(?:[Gg][Ii][Rr]\\s+0[Aa]{2})|(?:(?:([A-Za-z][0-9]{1,2})|(?:(?:[A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(?:(?:[A-Za-z][0-9][A-Za-z])|(?:[A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s*[0-9][A-Za-z]{2})$";
final String string = "c25d4f64-2336-4a5d-b94c-14dc12xxxa58\n"
     + "AB11AB";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}

表达式在 regex101.com 的右上面板中进行了解释, 如果你想探索/简化/修改它,在this link ,如果愿意,您可以观察它如何与一些样本输入相匹配。

正则表达式电路

jex.im可视化正则表达式:

enter image description here

关于java - 英国邮政编码的正则表达式也匹配 UUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57223300/

相关文章:

java - 提高 "drawString"方法文本质量

java - 将所有 Maven 库批量添加到 IntelliJ 中的类路径中

php - 删除包含开始 php 标记和空行的文件

Java Regex 在拆分前检查前一个字符

c# - 正则表达式获取自定义TAG之间的所有值

java - Apache Poi - 如何读取 xlsx 并在不包含信息的行上写入?

java - 我使用什么 URL 在 Web 浏览器中打开 String 对象

java - 使用 Java 在 JSON 文件上多次写入

javascript - 使用正则表达式匹配路径的中间?

python - 折叠字符串中的空格