2015-06-22 4 views
2

Использование регулярных выражений для идентификации #tagsрегулярное выражение для # тегов

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

Состояние должно быть # должно быть началом слова. содержит буквы, цифры и -.

- не должно появляться сразу после #. после и до - должен быть символ или цифра.

Строка может содержать несколько тегов.

Как написать регулярное выражение для itentifying выше #tags.

Я попытался это #{1}[A-Za-z0-9]+-*[A-Za-z0-9]+

ответ

4

Вы можете использовать это регулярное выражение:

#[A-Za-z0-9]+(-[A-Za-z0-9]+)*\b 
+1

Это прекрасно работает – xrcwrn

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" 
+0

Thankyou для придания различных способов – xrcwrn

+0

Да # должны начинать слова – xrcwrn

+0

Нет это не должно совпадать. но оба ответа соответствуют foo # bar и относятся к #bar как к тегу – xrcwrn

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 
Смежные вопросы