使用正则表达式识别#tags
Like How are you #friends #today is #great day.
条件应该是
#
应该是开头的。
它包含字母,数字和-
。
-
不应该出现在#之后。
-
之前和之后应该有字符或数字。
字符串可以包含多个标记。
如何在#tags上面编写正则表达式。
我试过这个#{1}[A-Za-z0-9]+-*[A-Za-z0-9]+
答案 0 :(得分:4)
你可以使用它,
#[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*
或
"(?<!\\S)#[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*(?=\\s|$)"
或
"(?<!\\S)#[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*\\b"
答案 1 :(得分:4)
您可以使用此正则表达式:
#[A-Za-z0-9]+(-[A-Za-z0-9]+)*\b
答案 2 :(得分:2)
以下是Alnum
类的示例,验证如下:
从#
开始,然后至少使用一个字母数字
包含字母数字和连字符
连字符必须被字母数字包围
// | one "#"
// || at least one alnum
// || | alnums...| or...
// || | | | not preceded by hyphen
// || | | | | hyphen
// || | | | | | not followed by hyphen or end
// || | | | | | | 0 or more times
// || | | | | | |
String pattern = "#\\p{Alnum}+(\\p{Alnum}|(?<!-)-(?!-|$))*";
String[] good = {
"#foo",
"#123",
"#foo-123"
};
String[] bad = {
"foo",
"123",
"#foo-",
"#foo--123"
};
for (String s: good) {
System.out.println(s.matches(pattern));
}
for (String s: bad) {
System.out.println(s.matches(pattern));
}
<强>输出强>
true
true
true
false
false
false
false