gpt4 book ai didi

Java正则表达式: matching a customized Hashtag pattern with a lookahead/lookbehind condition

转载 作者:行者123 更新时间:2023-11-30 03:14:37 26 4
gpt4 key购买 nike

我目前正在学习如何通过尝试匹配简单的标签模式来在 Java 中编写正则表达式。主题标签遵循以下条件:

  1. 它以主题标签开头:#
  2. 必须至少包含 1 个字母:[a-zA-Z]
  3. 它可以包含 [a-zA-Z0-9_] 类中的任何字符
  4. 前面不能有 [a-zA-Z0-9_] 类的字符

据此,我认为正确的正则表达式是:

PATTERN = "(?<![a-zA-Z0-9_])#(?=.*[a-zA-Z])[a-zA-Z0-9_]+"

这里我使用了前瞻 (?=.*[a-zA-Z])确保条件 2 成立并使用后视 (?<![a-zA-Z0-9_])确保条件 4 成立。我不太确定是否以 + 结尾.

这适用于简单的测试用例,但不适用于复杂的测试用例,例如:

String text = "####THIS_IS_A_HASHTAG; ;#This_1_2...#12_and_this but not #123  or #this# #or#that";

其中不匹配 #THIS_IS_A_HASHTAG , #This_1_212_and_this

有人可以解释一下我做错了什么吗?

最佳答案

此前瞻:

(?=.*[a-zA-Z])

当输入如下时可能会产生错误的结果:

####12345...#12_and_this

为您提供 2 个匹配项 #12345#12_and_this。而根据您的规则,只有第二个应该是有效匹配。

要解决此问题,您可以使用此正则表达式:

(?<![a-zA-Z0-9_])#(?=[0-9_]*[a-zA-Z])[a-zA-Z0-9_]+

其中lookahead (?=[0-9_]*[a-zA-Z]) 表示断言# 后存在字母,并且可选存在数字或之间加下划线。

Here is a regex demo for you

关于Java正则表达式: matching a customized Hashtag pattern with a lookahead/lookbehind condition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32929907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com