2015-10-19 6 views
2

мне нужно иметь Regex для строки: Created ID @DBDOYEF has problemsРегулярного выражение шаблона сопоставления Java

Слово @DBDOYEF может содержать a-z,A-Z,0-9 и все специальные символы, такие как

~!#$%^&*()_+{}:"<>?,./\. 

Пожалуйста, помогите мне создать образец для это слово. Я использовал

Created ID \\b[A-Z][0-9][\\//[email protected]#$%^~&*!():]+\\b has problems 

для этого, но это не удается для многих случаев.

+0

Пожалуйста, дайте некоторые ваши TestCase ... –

+0

Попробуйте 'Создано ID @ [A-Za-z0-9 ~ # $%^& *() _ + {}: \ "<>?,. /] +' [demo] (https: // regex101.com/r/aL9xL1/1) – Mariano

+0

может начинаться с @. несколько раз он начинается с: или A-Z или a-z или 0-9. – Megha

ответ

2

Ваши проблемы

  • \b соответствует только между «словом» символ (буква/цифра/подчеркивание) и без символа слова (или начало/конец строки). Поэтому вам нужен другой метод, чтобы определить, что ваш матч закончился. Поскольку у вас уже есть пробелы до и после вашего идентификатора, у вас уже есть такой метод и вы можете удалить \b s.
  • - - метасимвол в классе символов и должен быть помещен в начале или конце класса символов, поэтому он не интерпретируется как маркер диапазона (как в A-Z).
  • Ваш идентификатор начинается с @, но это не относится к [A-Z], так что это не соответствует. Вероятно, вы захотите (необязательно) начать матч с @.
  • Очевидно, что идентификатор не требует номера в позиции 2 и допускает буквы после позиции 1, поэтому вы должны объединить три класса символов в два (при условии, что первая буква должна быть буквой или цифрой).

Это дает

Created ID @?[A-Z0-9][-A-Z0-9\\/[email protected]#$%^~&*!():]+ has problems 

Если идентификаторы, такие как -([email protected]) справедливы, можно упростить, что

Created ID [-A-Z0-9\\/[email protected]#$%^~&*!():]+ has problems 
0

он может или не может начинаться с @. несколько раз он начинается с: или A-Z или а-г или 0-9

Вы пытались [A-Z][0-9][\\//[email protected]#$%^~&*!():]+, что требует письма, а затем цифры, а затем любой пунктуация. Вместо этого используйте те же character class для всех допустимых символов.

Regex

Created ID [@A-Za-z0-9~!#$%^&*()_+\-{}:\"<>?,./]+ 
  • [@A-Za-z0-9~!#$%^&*()_+\-{}:\"<>?,./]+ Соответствует любому из символов в character class любые времена. !

regex101 demo