Regexp [xyz] проти [x | y | z]

Яка різниця між:

[xyz]

[x|y|z]

Якщо якийсь? Обидва [] і | вкажіть альтернативи.

Наступний код друкує точні результати:

String string = "the x and the y and the z and the nothing";
evaluatePattern(Pattern.compile("\\w*[xyz]\\w*"), string);
evaluatePattern(Pattern.compile("\\w*[x|y|z]\\w*"), string);
3
Ну, один з них відповідає "|" . Ви мали на увазі /(x | y | z)/? У відповідній примітці, чи два РЕ збігаються з однією рядком, нічого не говорить про те, наскільки РЕ є рівнозначні.
додано Автор darch, джерело

11 Відповіді

[xyz] matches just three characters - x, y, z. It's same as (x|y|z)

[x|y|z] matches 4 characters - x, y, z, |. It's same as (x|y|z|\|)

Зауважте, що pipe (|) не має особливого значення в Класі символів .

7
додано

Як інші сказали, [x | y | z] відповідатиме одному з чотирьох знаків - x , y , z або | . Це відбувається тому, що всередині класів символів ( на відміну від інших регістрів у регулярному вираженні ) більшість часу єдиним «спеціальним символом» є ] , що закінчує клас символів.

Аналогічним чином це: [. ^ $ |] відповідатиме одному з п'яти символів - . , ^ , $ або | .

Є деякі "винятки" до цього правила - наприклад: [^ abc] буде відповідати будь-якому одному символу, який не a , b або c . Ви також можете вказати діапазон символів - наприклад, [a-z] відповідає будь-якому одному нижньому регістру.

Слід також зазначити, що для більшості двигунів регулярного виразу, хоча символи, такі як . , не потребують втечі всередині класів символів, \ як і раніше вважається спробою втекти від них. Наприклад, [\.] відповідає лише символу . , тоді як [\...] відповідає одному з символів \ або . .

Більш докладне пояснення класів символів можна знайти тут: http://www.regular-expressions.info /charclass.html . Зокрема, зверніть увагу на розділ під назвою "Метасимволи всередині символьних класів" .

3
додано
Не зовсім. ^ і - - також спеціальні символи в класі символів (залежно від їх положення), а також зворотна риска. Тому ваш другий приклад регулярного виразу не буде відповідати буквальному зворотному слеш.
додано Автор Tim Pietzcker, джерело
Я оновив мою відповідь, сподіваюся, буде більш правильною щодо поведінки `` всередині класу персонажів.
додано Автор CmdrMoozy, джерело
Правий Тім, зворотна коса риска в [\.] не буде відповідати буквальному зворотному косу риску. Це трактується як спроба уникнути точки, яка (як ви сказали) не потребує втечі, тому воно фактично ігнорується. Тільки в асортименті BRE та ERE зворотна схема буде розглядатися як букварна зворотна коса риска. OP, схоже, використовує Java.
додано Автор Alan Moore, джерело
Подібно до цієї відповіді найкраще, оскільки він вказує на те, що більшість інших спеціальних символів не є спеціальними символами всередині []. Дякую.
додано Автор user519499, джерело

Як інші сказали, [x | y | z] відповідатиме одному з чотирьох знаків - x , y , z або | . Це відбувається тому, що всередині класів символів ( на відміну від інших регістрів у регулярному вираженні ) більшість часу єдиним «спеціальним символом» є ] , що закінчує клас символів.

Аналогічним чином це: [. ^ $ |] відповідатиме одному з п'яти символів - . , ^ , $ або | .

Є деякі "винятки" до цього правила - наприклад: [^ abc] буде відповідати будь-якому одному символу, який не a , b або c . Ви також можете вказати діапазон символів - наприклад, [a-z] відповідає будь-якому одному нижньому регістру.

Слід також зазначити, що для більшості двигунів регулярного виразу, хоча символи, такі як . , не потребують втечі всередині класів символів, \ як і раніше вважається спробою втекти від них. Наприклад, [\.] відповідає лише символу . , тоді як [\...] відповідає одному з символів \ або . .

Більш докладне пояснення класів символів можна знайти тут: http://www.regular-expressions.info /charclass.html . Зокрема, зверніть увагу на розділ під назвою "Метасимволи всередині символьних класів" .

3
додано
Не зовсім. ^ і - - також спеціальні символи в класі символів (залежно від їх положення), а також зворотна риска. Тому ваш другий приклад регулярного виразу не буде відповідати буквальному зворотному слеш.
додано Автор Tim Pietzcker, джерело
Я оновив мою відповідь, сподіваюся, буде більш правильною щодо поведінки `` всередині класу персонажів.
додано Автор CmdrMoozy, джерело
Правий Тім, зворотна коса риска в [\.] не буде відповідати буквальному зворотному косу риску. Це трактується як спроба уникнути точки, яка (як ви сказали) не потребує втечі, тому воно фактично ігнорується. Тільки в асортименті BRE та ERE зворотна схема буде розглядатися як букварна зворотна коса риска. OP, схоже, використовує Java.
додано Автор Alan Moore, джерело
Подібно до цієї відповіді найкраще, оскільки він вказує на те, що більшість інших спеціальних символів не є спеціальними символами всередині []. Дякую.
додано Автор user519499, джерело

Шаблон [x | y | z] буде відповідати рядку "|" , тоді як [xyz] не буде. Кронштейни створюють клас символів , який включає в себе символи x , y , z і | .

1
додано

Шаблон [x | y | z] буде відповідати рядку "|" , тоді як [xyz] не буде. Кронштейни створюють клас символів , який включає в себе символи x , y , z і | .

1
додано
  1. The [xyz] is a set of the characters x, y and z
  2. The [x|y|z] is the set of the characters x, y and z along with |

У одного з них є додатковий персонаж, який він збігатиметься.

0
додано
  1. The [xyz] is a set of the characters x, y and z
  2. The [x|y|z] is the set of the characters x, y and z along with |

У одного з них є додатковий персонаж, який він збігатиметься.

0
додано

[xyz] is effectively equivalent to (?:x|y|z), though they may have different internal representations. The second is probably slower. I just changed it to remove the capturing group.

0
додано

[xyz] is effectively equivalent to (?:x|y|z), though they may have different internal representations. The second is probably slower. I just changed it to remove the capturing group.

0
додано

Якщо ви сумніваєтесь, просто перегляньте цей шаблон для прикладів різних регулярних вирази та правила цього закону.

Сподіваюся, це допомагає.

0
додано

Якщо ви сумніваєтесь, просто перегляньте цей шаблон для прикладів різних регулярних вирази та правила цього закону.

Сподіваюся, це допомагає.

0
додано