2013-04-01 5 views
0

Я разрабатываю плагин WordPress, и у меня возникла серьезная проблема с получением правильной информации из регулярного выражения.preg_match_all возвращает пустой массив

Код для регулярного выражения ниже:

preg_match_all("|grass1(.*)grass2|i", $split[1], $out); 

Выход пустой массив.

$ split [1] - это тело письма (в виде строки).

Я ищу, чтобы извлечь всю информацию между grass1 & grass2. Таким образом, в теле письма (как строка) существует «grass1 Something Something grass2», в котором мне нужно что-то нечто как результат. Здесь проблема кроется, и она более странная, потому что она работает, если строка является объектом, заголовком или всем электронным письмом, который работает очень хорошо. Поэтому я смущен тем, что происходит. Любая помощь по пониманию проблемы будет полезна.

Образец теле письма:

"_NextPart_000_0098_01CE2BC1.BFAF9200 
Content-Type: text/plain charset="us-ascii" Content-Transfer-Encoding: 7bit 
grass1 I'm testing the before or after function. If successful you should see all of   this message in a future email. grass2" 
+1

Вы можете включать образец $ расколоть [1] не где это возвращает ни спичек? – Adrian

+0

Возможно ли HTML-текст электронной почты? –

+0

Является ли тело письма в HTML? Если это так, вы не можете использовать регулярные выражения для его анализа. –

ответ

1

Может быть, есть какой-то ты символ новой строки «\ п» между grass1 и grass2 поэтому «м» (поиск мультилинии) модификатор может быть полезен:

preg_match_all("|grass1(.*)grass2|im", $split[1], $out); 

См. Руководство по PHP reference.pcre.pattern.modifiers.php к ссылкам модификаторов.

Например, "s" (матч "\ п" тоже "") может быть альтернативой:

preg_match_all("|grass1(.*)grass2|is", $split[1], $out); 

ADD Просто чтобы быть ясно: "м" и "s" похожи, но не то же самое:

  • «s» пусть (точка) соответствует символ новой строки тоже, так соответствовать Multilines текст
  • „м“ применить шаблон до мультилиний «„“*.» текст, поэтому "a \ nb" соответствует линия заканчивается и начинается с элементом б, другими словами, я могу использовать «\ п» в качестве шаблона поиска
+0

Пробовал, и я все еще получаю пустой массив. Я даже вынул i, чтобы посмотреть, будет ли m работать. – 2013-04-01 18:12:01

+0

:) :) :) :) :) :) «| is» работает. Позвольте мне проверить это дальше. – 2013-04-01 18:17:38

+0

Спасибо ТЕБЕ ... Это, наконец, работает. – 2013-04-01 18:19:52

Смежные вопросы