Регулярный анализ синтаксиса пользовательских строк в PHP - PullRequest
0 голосов
/ 19 февраля 2009

Это больше общий вопрос о регулярных выражениях, чем специфичный для PHP.

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

A/B/PA ID U/C/D

И я пытаюсь извлечь сегмент в середине косой черты с пробелами ("/ PA ID U"), используя:

preg_match('/(\/PA .+)(\/.+|$)/', '', $matches);

Однако вместо того, чтобы получать "/ PA ID U", как я ожидал, я получал "/ PA ID U / C / D".

Как я могу сделать так, чтобы это соответствовало "/.+" над "$" в этой последней группе?


Дополнительные примечания:

Мне нужно, чтобы последняя группа соответствовала либо другому "/ somethingsomthing", либо "", потому что строка сильно различается. Если я сопоставлю только «/ .+», я не смогу получить «/ PA ID U», если он находится в конце строки, например, в «A / B / PA ID U».

По сути, мне нужно иметь возможность извлекать определенные сегменты, например, так:

Дано: "A/B/PA ID U/PA ID U/C/D"

Выписка: (A), (B), (PA ID U), (PA ID U), (C), (D)


[UPDATE]

Я пытаюсь избежать использования split () или explode (), потому что это будет означать, что я должен сопоставить шаблон "PA ID U" отдельно. Помимо простого извлечения сегментов, разделенных косой чертой, мне нужно проверить, что подстроки соответствуют определенным шаблонам.

Ответы [ 3 ]

2 голосов
/ 19 февраля 2009

Я думаю, что вы можете наиболее эффективно использовать сплит для достижения того, что вы хотите.

split('/',$string);

См .: php manual

1 голос
/ 19 февраля 2009

Ваше регулярное выражение не работает, потому что .+ является жадным. Вы можете исправить это, добавив не жадный модификатор (?) к своему первому .+ как таковому:

preg_match('/(\/PA .+?)(\/.+|$)/', '', $matches);

Вы могли бы альтернативно сделать:

'/\/(PA [^\/]+)(\/.+|$)/'

Я переместил косую черту за пределы паренсов, чтобы избежать ее захвата (полагаю, вы не интересуетесь косой чертой). [^\/]+ захватит любой персонаж до следующего слеша.

0 голосов
/ 19 февраля 2009

некрамирез,

(\w+\s?)+

должно работать

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