2015-03-17 2 views
1

Для справки, это регулярное выражение тестер Я использую:
http://www.rsyslog.com/regex/регулярное выражение несколько соответствий

Как я могу изменить это регулярное выражение:

[^;]+ 

получить несколько суб-матчей за следующая тестовая строка:

;first;second;third;fourth;fifth and sixth;seventh; 

Я в настоящее время только получаю один из следующих результатов:

first 

В основном я хочу, чтобы каждый суб-матч состоит из содержания между ; символов, я надеюсь на список суб-матч, как это:

first 
second 
third 
fourth 
fifth and sixth 
seventh 
+1

Обычно вам нужно использовать модификатор для соответствия нескольким экземплярам. На многих языках это 'g'. В PHP вы в основном используете 'preg_match_all()' вместо 'preg_match()'. Я думаю, что ответ на вашу проблему должен быть где-то в документах. – HamZa

+0

@HamZa Я считаю, что использую это - заметьте на веб-сайте связанного тестера поле «Submatch to Use» по умолчанию «0 (All)». Это не одно и то же? – dtmland

+1

Это относится к группе 0. Попробуйте, например, это регулярное выражение '([^;]) [^;] +' и проверить группу 1. Вы заметите, что вывод 'f' из' first'. Моя интуиция говорит, что нынешнее поведение по дизайну. Хотя я не могу это сделать ... – HamZa

ответ

1

Следуя информации, приведенной в комментариях, я обнаружил, что причиной того, что я не могу получить более одного подзаголовка, является то, что мне нужно указать глобальный модификатор, и я не могу понять, как это сделать в используемом ryslog regex tester.

Однако это заставило меня решить мою проблему несколько иначе. Я пришел с этим регулярным выражением, которое еще только дает один матч, но число ближе к концу действует как индекс для нужного матча, так, например:

(?:;([^;]+)){5} 

спичек это из моей тестовой строки в этом вопросе:

fifth and sixth 

хотя это решение позволяет мне достичь того, чего я хотел - хотя и в иной манере - истинный ответ на мой вопрос содержится в комментариях Хамзы. Дополнительная информация:

Как изменить регулярное выражение для получения нескольких совпадений ?

Ответ, вы не может изменить само регулярное выражение для того, чтобы получить несколько суб-матчи. Для этого требуется установка глобального модификатора.

Основываясь на этой информации, я опубликовал a new question on serverfault, специально предназначенный для системы регулярных выражений rsyslog.