0

如果每个文本行都以 Foo 开头,我如何检查 PHP?

我想在行的开头删除“Foo”,但前提是每行都以 Foo 开头。

$string = 'Foo A
Foo B
Foo C';

should return:
A
B
C

$string = 'Foo A
B
Foo C';

should return:
Foo A
B
Foo C

这怎么可能匹配?

if ( preg_match("/^Foo/m", $string ) ) {
  $string = preg_replace('/^Foo /m', '', $string);
}

这仅匹配单行,但如前所述,它仅适用于所有行以“Foo”开头的情况。

测试:http ://codepad.viper-7.com/roZNEo

4

3 回答 3

2

使用&$count参数 forpreg_replace确定发生了多少替换。如果这等于文本中的行数,那么每一行都以Foo.

function replace($text) {

    if ( preg_match("/^Foo/m", $text ) ) {
        $return = preg_replace('/^Foo /m', '', $text, -1, $num_matches); 
        if( $num_matches == count( explode( "\n", $text))) {
            $text = $return;
        }
    }

    return $text;
}

您也可以省略对 的调用preg_match,因为它是多余且不必要的。

演示

于 2012-06-07T17:10:16.160 回答
1
<?php

$string = 'Foo A
Foo B
Foo C';

$a = explode("\n", $string);

foreach ($a as $line) {
  print preg_replace('/^Foo /', '', $line) . "\n";
}

?>

在此处查看实际操作:http: //codepad.org/ch6x0hSR

请注意,这对于此示例数据来说太过分了;str_replace()如果你真的不需要正则表达式,你应该使用。

哎呀,如果每一行总是格式化{uselessword}{delimiter}{importantword},那么你也可以使用explode().

于 2012-06-07T17:11:19.867 回答
1

我稍微修改了正则表达式以断言每一行都以"Foo".

if ( preg_match("/^((?:^|\n)Foo.*)+$/", $text ) ) {
    $text = preg_replace('/^Foo /m', '', $text);
}

http://codepad.viper-7.com/ail50t

于 2012-06-07T17:13:36.223 回答