Строка регулярного выражения для IRC - PullRequest
1 голос
/ 10 января 2010

Я пытаюсь написать строку регулярного выражения, соответствующую строке, восстановленной из канала IRC.

Сообщение будет в формате "! КОМАНДНЫЕ параметры"; пока единственная команда, созданная системой, это повторить.

Используемое мной регулярное выражение выглядит следующим образом:

/![repeat] (.*?)/

Когда добавляются другие команды, это будет выглядеть так:

/![cmd1|cmd2|cmd3] (.*?)/

Похоже, что он не соответствует нужным вещам в строке. Кто-нибудь может предложить какой-либо вклад в это?

Похоже, мне нужно добавить некоторые базовые регулярные выражения.

() скобки возвращают данные, [] совпадает, но не возвращает.

Переключение на () также не работает.

Программа IRC, которую я пишу, имеет динамическое количество команд, поэтому я добавил только «повтор», поэтому шаблон команды «[повтор]». Если бы я добавил «сказать», это было бы «[повторить | сказать]».

Ответы [ 4 ]

4 голосов
/ 10 января 2010

Используйте скобки для группировки:

/!(cmd1|cmd2|cmd3) (.*)/

Скобки […] обозначают класс символов, описывающий только один символ из набора символов.

Вы также не должны использовать не жадные .*, поскольку минимальное совпадение .*? - пустая строка.

1 голос
/ 10 января 2010

[repeat] является классом символов и будет соответствовать r или e или p и т. Д., Вы должны просто использовать

/!repeat (.*?)/

и

/!(cmd1|cmd2|cmd3) (.*?)/

Я не совсем понимаю, на что вы рассчитываете, но ленивый оператор выглядит неправильно, например

/!COMMAND (.*?)/ применительно к !COMMAND paramater будет соответствовать только !COMMAND, (.*?) в конце регулярного выражения гарантированно не будет соответствовать ничему.

1 голос
/ 10 января 2010

Вы использовали плохие скобки

/!(cmd1|cmd2|cmd3) (.*)/

Я не понимаю, что вы имели в виду под ? в своем регулярном выражении

1 голос
/ 10 января 2010

Вы делаете одну вещь неправильно. Если вы замените свои [] скобки на (), все должно работать. Между [] вы положили несколько букв для соответствия. [abc] будет соответствовать a, b или c, а не "abc", а (abc) будет соответствовать "abc", а (abc|bca) будет соответствовать "abc" или "bca".

Дополнительные сведения о регулярных выражениях Perl и reference для получения дополнительной информации.

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