我有正则表达式的问题
/\A[#a-z]+[#a-z0-9\-\s_.']*\z/
我想匹配
之类的结果aaa #aaa
带有主题标签的单词或没有主题标签的单词。但我的正则表达式允许创建
A#一个
我该如何改变?
答案 0 :(得分:2)
从问题和你的评论中,不清楚,应该是一个单词边界。你可能想要类似的东西:
(?<=^|\s|["'])#?[a-zA-Z]+\b(?=$|\s|[,;.:?!"'])
<强>假设:强>
"'
)和结尾(,;.:?!"'
)的空格或特殊字符分隔。特殊字符的基本原理是:
for example: food
也会产生example
set to "on"
也会产生on
您可能希望扩展这些字符列表。
答案 1 :(得分:1)
试试这个正则表达式:
#?[^# \n]+
您可以学习如何构建和测试正则表达式on this website。
Java中的用法示例(将^和$添加到模式以指示字符串的开头/结尾):
public static void main(String[] args) {
testFor("aaa");
testFor("#aaa");
testFor("a#a");
}
public static void testFor(String toTest) {
Pattern regex = Pattern.compile("^#?[^# \\n]+$");
Matcher matcher = regex.matcher(toTest);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
输出继电器
aaa
#aaa
答案 2 :(得分:1)
答案 3 :(得分:0)
试试这个正则表达式:
(?<!\w)#\w+|(?<!#)\w+(?!#)
如果你的正则表达式引擎支持前瞻和后瞻,那么应该这样做。