#标签的正则表达式

时间:2015-06-22 10:19:11

标签: java regex

使用正则表达式识别#tags

Like How are you #friends #today is #great day.

条件应该是 #应该是开头的。 它包含字母,数字和-

-不应该出现在#之后。 -之前和之后应该有字符或数字。

字符串可以包含多个标记。

如何在#tags上面编写正则表达式。

我试过这个#{1}[A-Za-z0-9]+-*[A-Za-z0-9]+

3 个答案:

答案 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