Проблема с регулярным выражением в PHP - Необязательный текст - PullRequest
0 голосов
/ 05 марта 2009

Следующее регулярное выражение должно быть для Do Dollars Dollar или #do #Dollars или #Dollar, но не для Doblabla (каким оно является в настоящее время) и т. Д.

/^@(?P<name>\w+) (?P<amount>\d+) [#]?Do(?:llars?)?/i

Как мне это изменить? Чтобы он больше не совпадал с Dogfood, Dogs и т.д ...

Обновление 3: не решено после :

 /^@(?P<name>\w+) (?P<amount>\d+) [#]?(do(?:llars?|s))/i

Не соответствует следующее:

@name 2 do

Есть мысли?

Мой второй вопрос: как мне затем разрешить ему совпадать с: Dox и # Dox

Итак, в конце я хочу, чтобы оно совпадало с

@name 2 #do
@name 2 do
@name 2 #dollars
@name 2 dollars
@name 1 dollar
@name 1 #dollar
@name 2 dox
@name 2 #dox

и ничего больше.

Большое спасибо!

Ice

Ответы [ 5 ]

2 голосов
/ 05 марта 2009

Это должно сделать это для вас:

/^@(?P<name>\w+) (?P<amount>\d+) #?Do(?:llars?|x)(?:\s|$)/i

Это соответствует имени и количеству, за которым следует дополнительный #, затем «do», затем «llar», «llars», пробел или конец строки.

2 голосов
/ 05 марта 2009

Если я не ошибаюсь, (?:llars?)? предполагает, что это будет соответствовать чему-либо, начинающемуся с do, и не заботится о том, что после него, поскольку это необязательно.

Добавьте $ в конец, чтобы строка заканчивалась символом do или долларами.

1 голос
/ 05 марта 2009

Я нашел ответ после нескольких попыток на Regexp.net

[#]?(do(?:llars?))
1 голос
/ 05 марта 2009

Используйте якорь $, чтобы отметить конец строки, и оператор | для альтернатив alt-1|alt-2|…:

 /^@(?P<name>\w+) (?P<amount>\d+) #?(do(?:llars?|x)?)$/i
0 голосов
/ 05 марта 2009

Может быть, я не совсем понимаю, но ваше выражение выглядит слишком сложным для меня. Что не так с этим делать?

/^@name [12] #?do(llar|llars|x)?$/

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

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