Perl Tutorial: Использование регулярных выражений

hon скомпилированные шаблоны регулярных выраженийиметьfindall метод это делает следующее:

Вернуть все неперекрывающиеся совпадения шаблона в строке в виде списка строк. Строка сканируется слева направо, и совпадения возвращаются в указанном порядке. Если в шаблоне присутствует одна или несколько групп, вернуть список групп; это будет список кортежей, если шаблон имеет более одной группы. Пустые совпадения включаются в результат, если они не касаются начала другого совпадения.

Какой канонический способ сделать это в Perl? Наивный алгоритм, который я могу придумать, заключается в следующем: «пока поиск и замена на пустую строку успешны, делайте [suite]». Я надеюсь, что есть более хороший способ. :-)

Заранее спасибо!

Ответы на вопрос(1)

Решение Вопроса

/g Модификатор в вашем матче. Изperlop руководство по эксплуатации:

"/g«Модификатор определяет глобальное сопоставление с образцом, то есть сопоставление как можно больше раз в пределах строки. То, как он ведет себя, зависит от контекста. В контексте списка он возвращает список подстрок, совпадающих с любыми захватывающими скобками в регулярном выражении. Если круглых скобок нет, возвращается список всех совпадающих строк, как если бы вокруг всего шаблона были круглые скобки.

В скалярном контексте каждое выполнениеm//g"находит следующее совпадение, возвращает true, если оно совпадает, и false, если дальнейшего совпадения нет. Положение после последнего совпадения может быть прочитано или установлено с использованиемpos() функция; видеть "pos" вperlfunc, Неудачное совпадение обычно сбрасывает позицию поиска в начало строки, но вы можете избежать этого, добавив "/cмодификатор (например,m//gc"). Изменение целевой строки также сбрасывает позицию поиска.

 cdleary22 янв. 2009 г., 03:28
О, конечно! Я должен был понять, что это происходит из земли Вим.

Ваш ответ на вопрос