Порядок совпадения регулярных выражений

#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
  

Но это имеет ту же проблему, на которую указано в комментарии Элвина к ответу Вотли. Это связано с тем, что вопрос недостаточно указан. Не указано, каков приоритет.