2014-09-27 3 views
0

Я пытаюсь научиться обрабатывать выражения регулярных выражений и получил некоторые упражнения, но никаких решений для этого. Один вопрос: все строчные слова, кроме «if».Regex Expressions

Могу ли я сделать это один, как это:

[a-z][a-z]^[if] | [a-z][a-z][a-z]+ 

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

+0

отправьте несколько примеров .. Вы хотите совместить 'fooifbar'? –

+0

, если вы экспериментируете, попробуйте [regetron] (https://gitorious.org/regetron) – DOOM

+0

«По крайней мере два» также должны включать два. Будьте осторожны с вашими пространствами вокруг '|', которые включены в соответствие шаблонов. www.regex101.com - хороший экспериментальный сайт. – BUSY

ответ

1

Ну ... полный реальное решение было бы что-то подобное:

\b(?!if\b)\p{Ll}+\b 

Demo

Но я полагаю, что это, ну, «высокий уровень» регулярное выражение, которое вы не узнаете все же.

Итак, давайте сделаем все просто. Если вы можете принять игнорировать слова менее 3-х символов, вы можете написать следующее:

\b[a-hj-z][a-eg-z][a-z]+|i[a-z]{2,} 

Demo

Первые два класса персонажей просто [a-z] без i и f соответственно.

Если вы хотите включить слова менее 3-х символов, это будет делать:

\b(?:i|if[a-z]+|i[a-eg-z][a-z]*|[a-hj-z][a-z]*)\b 

Demo

Но это становится сложнее в этой точке ...

+0

спасибо за ваше объяснение – user1550036

+0

ваше первое регулярное выражение будет соответствовать одному символу. –

+0

@AvinashRaj Да, это был момент, я пытался смягчить требование 3+ письма. Ведь «а» все еще слово. –

1

Все последовательности два или более строчных букв, кроме «если»:

[a-hj-z][a-z]+|i(?:[a-eg-z][a-z]*|f[a-z]+) 

С отрицательным заглядывая вперёд, вы также можете сделать:

(?!if\b)[a-z]{2,} 
1

Простым решением было бы поместить то, что вы хотите игнорировать на левой стороне оператора чередования и разместить то, что вы хотите, чтобы соответствовать в захвате на правой стороне оператора чередования, когда вы пытались.

\bif\b|([a-z]{2,}) 

Примечание: Каретка ^ вне символьного класса не означает отрицания, он утверждает позицию в начале строки. И если вы не используете модификатор x (free-spacing), вам нужно удалить пробелы между чередованием.