2014-10-25 4 views
0

У меня возникли проблемы с пониманием различий между квадратными скобками [] и вертикальной полосой | в регулярных выражениях.Регулярное выражение: разница между квадратными скобками [] и вертикальной полосой |

Например: Когда я использую этот код в Java, чтобы изменить формат строки (с помощью |):

str = str.replaceAll("(\\d+|\\W)", "$0 ").replaceAll("\\s+", " ").trim(); 

С: (12 + ((23+ 37) * (774 * 435)))

Для того, чтобы: (12 + ((23 + 37) * (774 * 435)))

Какой желаемый результат.

Однако, когда я использую этот код, я получить другой вывод (С помощью []):

str = str.replaceAll("[\\d+\\W]", "$0 ").replaceAll("\\s+", " ").trim(); 

я получаю от: (12 + ((23+ 37) * (774 * 435)))

Для того, чтобы: (1 + 2 ((2 3 + 3 7) * (7 7 4 * 4 3 5)))

Обратите внимание на пробелы между числами (не требуется).

Итак, может кто-нибудь объяснить, что происходит? Или в чем разница между [] и |?

спасибо.

+0

Посмотрите, что эта ссылка уже была принята. Нажмите [здесь] (http://stackoverflow.com/questions/9801630/what-is -the-difference-between-square-brackets-and-roundheses-in-a-regex ""). – chuck

+0

'|' используется для обеспечения «или» функциональности, когда используется внутри(), в то время как символьные классы '[]' обозначают, как в любом символе/символах внутри '[]' для указанного числа символы, обозначаемые следующими спецификаторами '? * + {#}', или если используется '^', это означает, что __don't__ соответствует этому символу. –

ответ

1

Вот similar question.

Вертикальная полоса является регулярное выражение «или» означает «А или В»

квадратные скобки класс значение символа «любой символ из или б.

Character class является сокращением для„или“ . Из этого explanation

  • Если вы хотите, чтобы соответствовать такой а или е использовать [ае]
  • класс символов соответствует только один символ.
  • Можно также использовать дефис для указания диапазона, такие как [0-9] или [а-е]
0

В brakcets ([]) сводит на нет эффект +. Поэтому, когда у вас есть [\\d+\\W], который соответствует одному символу (цифра, + или не-word)

+0

+1, я удивляюсь, почему вы были ниспадаете. – Toto

Смежные вопросы