2015-05-06 7 views
6

Я новичок в регулярном выражении через tutorial Я нашел регулярное выражение [...] говорит Matches any single character in brackets.. Так что я попыталсяВ чем смысл [...] regex?

System.out.println(Pattern.matches("[...]","[l]")); 

Я также попытался избежать скобки

System.out.println(Pattern.matches("[...]","\\[l\\]")); 

Но это дает мне false я ожидал true потому что l находится внутри скобок.

Было бы полезно, если бы кто-нибудь очистил мои сомнения.

+2

Скобки не будет частью match.If вы хотите, чтобы соответствовать ' [l] 'use' \\ [l \\] ' – vks

+0

Также: ... ожидает три символа. – Stultuske

+4

@Stultuske он не ожидает символов '3' ........ он просто говорит один из них, который здесь же, но – vks

ответ

4

Символы, которые находятся внутри [ и ] (называется character class) рассматриваются как набор символов, чтобы выбрать из, кроме ведущих^, который сводит на нет результата и -, что означает диапазон (если это между двумя символами). Примеры:

  • [-123] спички -, 1, 2 или 3
  • [1-3] соответствует одной цифре в диапазоне от 1 до 3
  • [^1-3] соответствует любому символу , кроме любой из цифр в диапазоне от 1 до 3
  • . соответствует любые символы
  • [.]совпадает с DOT.

Если вы хотите, чтобы соответствовать строке [l] вы должны изменить регулярное выражение:

System.out.println(Pattern.matches("...", "[l]")); 

Теперь она печатает true.

Регулярное выражение [...] эквивалентно регулярному выражению \. и [.].

+0

@timpietzcker - заставляет мои ответы выглядеть лучше :) – Maroun

+0

Я думаю * Алан * прав. OP знает, что означает '[...]'. Итак, ваш ответ вернее *. Вероятно, он должен смотреть на * регулярные выражения в глубину * :) – TheLostMind

+0

@TheLostMind В учебнике должен использоваться лучший заполнитель, чем этот, он очень запутан для новичков. – Maroun

4

Учебник немного вводит в заблуждении, он говорит:

[...] Соответствует любой одиночный символ в скобках.

Однако это означает, что регулярное выражение будет соответствовать одному символу против любого из символов внутри скобок. ... означает «вставить символы, которые вы хотите совместить здесь». Поэтому вам нужно заменить ... с символами, с которыми вы хотите сопоставить.

Например, [AP]M будет соответствовать «AM» и «PM».

Если ваше регулярное выражение буквально [...], то оно будет соответствовать буквальной точке. Обратите внимание, что в скобках нет повторяющихся символов.

2

Учебник говорит:

Соответствует любой одиночный символ в скобках.

Это означает, что вы заменить ... с одного символа, например [l]

Они будут печатать верно:

System.out.println(Pattern.matches("[l]","l")); 
System.out.println(Pattern.matches("[.]",".")); 
System.out.println(Pattern.matches("[.]*",".")); 
System.out.println(Pattern.matches("[.]*","......")); 
System.out.println(Pattern.matches("[.]+","......")); 
+1

'[...]' является допустимым регулярным выражением. Он * может быть упрощен до '[.]', Но он определенно действителен. – Maroun

+0

исправлено, спасибо – jaypi

+0

@MarounMaroun, я предположил, что он пытался сказать, что я сказал в своем (теперь удаленном) комментарии: они не говорят о реальном регулярном выражении '[...]'. Однако ответ все еще немного запутан. Я думаю, что лучше всего избавиться от точек и использовать реалистичные примеры, подобные тем, которые вы ответили. –