#regex #matching
#регулярное выражение #сопоставление
Вопрос:
Мой вопрос прост предположим, я хотел бы сопоставить гласные в слове, но я хотел бы сопоставить их в определенном порядке по мере появления, например a, e, i, o, u . Как бы я это сделал?
Ответ №1:
Итак, вы ищете, за a
которыми следуют некоторые символы, затем e
за которыми следуют некоторые символы и так далее?
Другими словами, a
затем следует материал, которого нет e
, затем e
. Затем материал, которого нет i
тогда i
. Затем материал, которого нет o
тогда o
. И, наконец, материал, который не является u
и, наконец, u
.
В терминах регулярных выражений это a[^e]*e[^i]*i[^o]*o[^u]*u
(Вы могли бы обойтись .*?
но зачем это делать, когда вы можете более точно определить, что вы имеете в виду.)
Комментарии:
1. Вы забыли некоторые * s там, но я думаю, что любой бы понял.
2. небольшим уточнением было бы: a [^ eiou] * e [^aiou] * i [^aeou] * o [^ aeiu] u
3. Так я и сделал! Добавлены недостающие * s в.
4. @Alvin поднимает отличный вопрос. Я предположил, что любая строка допустима до тех пор, пока гласные существуют в этом порядке. Итак, uAuEuIuOuUu допустимо, поскольку я могу определить (и написал с заглавной буквы) последовательность A-E-I-O-U, несмотря на обилие дополнительных U. Если вам нужно разрешить гласные ТОЛЬКО в таком порядке, вам нужно будет поступить так, как предлагает Элвин.
5. @Votey ваши регулярные выражения не соответствуют uaueuluouuuu, но они соответствуют «кощунственным», что доказывает вашу точку зрения.
Ответ №2:
Я бы пошел с:
a.*?e.*?i.*?o.*?u
Но это имеет ту же проблему, на которую указано в комментарии Элвина к ответу Вотли. Это связано с тем, что вопрос недостаточно указан. Не указано, каков приоритет.