Java正则表达式:将定制的Hashtag模式与前向/后向条件匹配
我目前正在学习如何通过尝试匹配简单的Hashtag模式来用Java编写正则表达式。哈希标记符合以下条件:Java正则表达式:将定制的Hashtag模式与前向/后向条件匹配,java,regex,Java,Regex,我目前正在学习如何通过尝试匹配简单的Hashtag模式来用Java编写正则表达式。哈希标记符合以下条件: 它以一个标签开始:# 它必须至少包含一个字母:[a-zA-Z] 它可以包含类[a-zA-Z0-9]中的任何字符 其前面不能有[a-zA-Z0-9! 基于此,我认为正确的正则表达式是: PATTERN = "(?<![a-zA-Z0-9_])#(?=.*[a-zA-Z])[a-zA-Z0-9_]+" 其中不匹配#此#u是_A_标签,#此_1_2和12_和_此 有人能解释一下我做错了什么
PATTERN = "(?<![a-zA-Z0-9_])#(?=.*[a-zA-Z])[a-zA-Z0-9_]+"
其中不匹配#此#u是_A_标签
,#此_1_2
和12_和_此
有人能解释一下我做错了什么吗?这个怎么样
它看起来符合您的标准,如所述:
#THIS_IS_A_HASHTAG
#This_1_2
#12_and_this
这一展望:
(?=.*[a-zA-Z])
当输入如下时,可能会产生错误的结果:
####12345...#12_and_this
给你两个匹配项#12345
和#12_和_this
。然而,根据你的规则,只有第二个应该是有效的匹配
要解决此问题,可以使用以下正则表达式:
(?<![a-zA-Z0-9_])#(?=[0-9_]*[a-zA-Z])[a-zA-Z0-9_]+
(?
其中,lookahead(?=[0-9.]*[a-zA-Z])
表示在#
之后断言字母的存在,其间可选存在数字或下划线
您是如何尝试匹配的?运行此操作将导致重新匹配所有三个。您是对的。您建议的正则表达式通过了我昨天发布的示例,但它不能确保hashtag至少包含一个字母(这是我列出的条件,但未包含在示例中).我已经相应地更新了示例。对此表示抱歉!
####12345...#12_and_this
(?<![a-zA-Z0-9_])#(?=[0-9_]*[a-zA-Z])[a-zA-Z0-9_]+