Проверка и сопоставление специально отформатированной строки - PullRequest
1 голос
/ 02 октября 2011

У меня есть следующий шаблон регулярных выражений, который отлично работает:

#^(.+?)=(.+?)$#D

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

немного текста = еще немного текста; что-то

некоторый текст = еще немного текста; что-то; что-то

некоторый текст = еще немного текста; что-то; что-то; что-то

Как видно из приведенного выше примера ввода, точка с запятой (;) используется в качестве разделителя и используется для разделения текста (это между текстом).

Полагаю, я могу использовать следующий шаблон регулярных выражений ниже - он будет работать только тогда, когда есть единица, но не будет, если текст разделен точкой с запятой ... Я знаю, что, вероятно, могу добавить что-то вроде [;]* но я хочу, чтобы проверка была строгой, чтобы убедиться, что она в этом формате (поэтому не может быть точек с запятой нигде, где они должны находиться только между текстом).

#^(.+?)=(.+?);(.+?)$#D

Если это поможет, я в настоящее время использую PHP-функцию preg_match() (поэтому совпадения можно использовать в форме array()).

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

Также я хотел бы отметить, что во время написания этого (и пролистывания системы тегов) у меня была новость ... возможно, использование preg_match_all() с PCRE рекурсивной функциональностью может быть возможным решением?

Ценю все ответы и благодарю за помощь.

Ответы [ 4 ]

3 голосов
/ 02 октября 2011

Почему бы просто не использовать explode() во второй половине, чтобы взорвать любые точки с запятой?

1 голос
/ 02 октября 2011

Вы можете попробовать это регулярное выражение:

#^(.+?)=((.+?)(;)?)+$#D
0 голосов
/ 02 октября 2011

Я бы попробовал:

#^(.+?)=(.+?)(?:;(.+?))+?$#D
0 голосов
/ 02 октября 2011

Попробуйте:

#^(.+?)=(.+?)(;(.+?))+?$#D

...