борется с условными регулярными выражениями - PullRequest
5 голосов
/ 23 августа 2010

У меня есть простая проблема, но я не могу ее решить. Либо моя строка имеет формат ID: dddd со следующим регулярным выражением:

/^ID: ([a-z0-9]*)$/

или следующим образом: ID: 1234 Status: 232, поэтому со следующим регулярным выражением:

/^ID: ([a-z0-9]*) Status: ([a-z0-9]*)$/

Теперь я хочу сделать одно регулярное выражение, которое может обрабатывать оба. Первое, что я придумал, было:

/^ID: ([a-z0-9]*)$|^ID: ([a-z0-9]*) Status: ([a-z0-9]*)$/

Это соответствует, но я смотрел на условные регулярные выражения и думал, что что-то должно быть возможно по-лине

if the string contains /Status:/
    /^ID: ([a-z0-9]*)$/
else
    /^ID: ([a-z0-9]*) Status: ([a-z0-9]*)$/

только, я не могу выразить это правильно. Я думал, что должен использовать /?=/, но понятия не имею, как. Что-то вроде

/((?=Status)^ID: ([a-z0-9]*) Status: ([a-z0-9]*)$|^ID: ([a-z0-9]*)$/

но это не работает.

Можете ли вы помочь?

Ответы [ 3 ]

7 голосов
/ 23 августа 2010

Вы ищете ^ID: (\d+)(?: Status: (\d+))?$

edit : Поскольку вопрос помечен как Ruby, стоит отметить, что в соответствии с этот вопрос и это сравнение вкусов , Ruby не выполняет условных регулярных выражений.

http://www.regular -expressions.info является отличным источником по этому вопросу.

3 голосов
/ 23 августа 2010

Вам нужна .* в вашем прогнозе: (Rubular)

/(?=.*Status)^ID: ([a-z0-9]*) Status: ([a-z0-9]*)$|^ID: ([a-z0-9]*)$/

Однако для вашего конкретного примера вам не нужен прогноз.Вместо этого вы можете использовать квантификатор ?: (Rubular)

/^ID: ([a-z0-9]*)(?: Status: ([a-z0-9]*))?$/
2 голосов
/ 23 августа 2010

Интересно, что, согласно этому вопросу , Ruby 1.8 / 1.9 не поддерживает условные регулярные выражения.

Читали ли вы (или кто-либо из ответивших) иначе?Если это так, может быть полезно обновить связанный вопрос, чтобы он больше не давал неверную информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...