RegEx: расширенный или - PullRequest
       9

RegEx: расширенный или

0 голосов
/ 15 февраля 2011

Я использую RegEx для получения определенных частей файла через PHP!

Позвольте мне показать вам пример ввода:

=== KEYWORD1 ===
CONTENT

==== ANOTHERKEYWORD ====

CONTENT2

=== TESTKEYWORD ===

CONTENT3

Мой ReGex теперь может быть: $pattern = "/.*=+ SEARCHTERM =+(.*?)=+.*=+.*/s";

SEARCHTERM - гибкая часть моего регулярного выражения.

Вот краткий обзор того, что я ожидаю получить и что я получаю:

  • Когда SEARCHTERM заменяется на KEYWORD1 Я ожидаю CONTENT, но ничего не получаю
  • Когда SEARCHTERM заменяется на ANOTHERKEYWORD Я ожидаю CONTENT2 и получаю его (так что этот случай работает
  • Когда SEARCHTERM заменяется на TESTKEYWORD Я ожидаю CONTENT3 и ничего не получаю

Таким образом, критической частью является то, что может быть, но не должно быть пустой строкой за пределами Searchterm AND , которую RegEx сначала должен посмотреть, есть ли еще === НИЧЕГО === после ПОИСКА и только если его нет, прочитайте все до конца файлов.

Я думал о $pattern = "/.*=+ SEARCHTERM =+(.*?)[=+.*=+.*|.*]/";, но это вызывает синтаксические ошибки.

Любая помощь очень ценится!

1 Ответ

1 голос
/ 15 февраля 2011

Попробуйте:

$str = <<<EOD
=== KEYWORD1 ===
CONTENT

==== ANOTHERKEYWORD ====

CONTENT2

=== TESTKEYWORD ===

CONTENT3    

EOD;

foreach(array('KEYWORD1', 'ANOTHERKEYWORD', 'TESTKEYWORD') as $keyword) {
    preg_match("/.*=+ $keyword =+([^=]+)/m", $str, $m);
    echo "$keyword -> $m[1]\n";;
}

вывод:

KEYWORD1 ->
CONTENT


ANOTHERKEYWORD ->

CONTENT2


TESTKEYWORD ->

CONTENT3
...