RegEx:扩展或

时间:2011-02-15 12:02:56

标签: php regex dokuwiki

我正在使用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首先必须查看是否存在任何其他=== ANYTHING ===在SEARCHTERM之后,只有在没有的情况下,阅读所有文件,直到文件结束。

我想到了$pattern = "/.*=+ SEARCHTERM =+(.*?)[=+.*=+.*|.*]/";但是这会抛出syntaxErrors。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

尝试使用:

$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