2011-10-02 2 views
1

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

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

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

некоторые текст = более какой-то текст, что-то

некоторый текст = некоторые больше текста, что-то, что-то

некоторый текст = некоторые больше текста, так mething, что-то, что-то

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

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

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

Если это поможет, я в настоящее время с помощью preg_match() функции РНР (поэтому матчи могут быть использованы в array() форме).

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

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

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

ответ

3

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

+0

Хмм не думал об этом, но обеспечил бы правильную форму? – user962026

+0

Учитывая ваши примеры, он должен работать нормально. – Amber

+0

Спасибо, я использовал explode() с комбинацией array_map ('trim', $ arr) и array_filter(), чтобы отсеять недопустимые записи. – user962026

1

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

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

Unfourtanetly не работает должным образом, произведенные матчи не ожидается, Что. – user962026

+0

В таком случае это не сработает? –

0

Я хотел бы попробовать:

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