0

在 PHP 中,我需要帮助替换某些标识符之间的文件中的某些内容。

例如 :

abcde
-BEGIN-
   bcdef
-END-
cdefg
-BEGIN-
   doo wah diddy
-END-
defgh

假设我需要用“z”替换“d”字符,但仅限于to-BEGIN-部分-END-之间。结果将是:

abcde
-BEGIN-
   bczef
-END-
cdefg
-BEGIN-
   zoo wah zizzy
-END-
defgh

我试图preg_match_all成功识别 -BEGIN- 到 -END- 部分:

$text = file_get_contents($file);
preg_match_all('#-BEGIN-.*?-END-#s', $text, $matches);

但无法弄清楚如何替换这些匹配项中的某些内容并返回包括正确替换在内的整个文本。

有任何想法吗?

4

2 回答 2

0

这将搜索-BEGIN--END-内的块,然后用z替换所有出现的d字符(因此是第 3 行中的函数)。preg_replace()

$str = preg_replace_callback(
    '~(?<=(?<=\n|^)-BEGIN-\n).*?(?=\n-END-)~s',
    create_function('$m','return preg_replace("~d~s","z",$m[0]);'),
    $str
);

编辑 1:在两个正则表达式规则 中将m标志更改为s 。


编辑 2:如果您想确保这里有一个更好的正则表达式版本(考虑到所有可能的换行符 - Windows、Unix 等)。

    '~(?<=
        (?<=\n|\r|\r\n|^)   -BEGIN- \n |
        (?<=\n|\r|\r\n|^)   -BEGIN- \r |
        (?<=\n|\r|\r\n|^)   -BEGIN- \r\n
    )
    .*?
    (?=
        \n      -END-   (?=\n|\r|\r\n|$) |
        \r      -END-   (?=\n|\r|\r\n|$) |
        \r\n    -END-   (?=\n|\r|\r\n|$)
    )~xs',
于 2012-10-20T01:37:18.313 回答
0

Preg_replace()应该可以解决问题。

于 2012-10-20T00:59:09.047 回答