【发布时间】:2015-10-05 06:03:47
【问题描述】:
我目前正在通过尝试匹配简单的 Hashtag 模式来学习如何在 Java 中编写正则表达式。 Hashtags 遵循以下条件:
- 它以标签开头:#
- 必须至少包含 1 个字母:[a-zA-Z]
- 它可以包含 [a-zA-Z0-9_] 类中的任何字符
- 前面不能有 [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_2 和 12_and_this
谁能解释我做错了什么?
【问题讨论】:
-
你想如何匹配这个?运行这会导致 RE 匹配所有三个。