Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式:检查是否每个文本行都以Foo开头_Php_Regex_Preg Replace_Preg Match - Fatal编程技术网

PHP正则表达式:检查是否每个文本行都以Foo开头

PHP正则表达式:检查是否每个文本行都以Foo开头,php,regex,preg-replace,preg-match,Php,Regex,Preg Replace,Preg Match,如果每个文本行都以Foo开头,如何在PHP中进行检查 我想删除行开头的“Foo”,但前提是每行都以Foo开头 $string = 'Foo A Foo B Foo C'; should return: A B C 及 这怎么能匹配呢 if ( preg_match("/^Foo/m", $string ) ) { $string = preg_replace('/^Foo /m', '', $string); } 这只匹配一行,但如前所述,它应该只适用于所有以“Foo”开头的行 测试:

如果每个文本行都以Foo开头,如何在PHP中进行检查

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

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

should return:
A
B
C

这怎么能匹配呢

if ( preg_match("/^Foo/m", $string ) ) {
  $string = preg_replace('/^Foo /m', '', $string);
}
这只匹配一行,但如前所述,它应该只适用于所有以“Foo”开头的行


测试:

使用
preg_replace
和$count
参数来确定发生了多少次替换。如果这等于文本中的行数,那么每一行都以
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;
}
if ( preg_match("/^((?:^|\n)Foo.*)+$/", $text ) ) {
    $text = preg_replace('/^Foo /m', '', $text);
}
您还可以省略对
preg\u match
的调用,因为它是多余的,不必要的


使用
preg_replace
和$count
参数来确定发生了多少次替换。如果这等于文本中的行数,那么每一行都以
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;
}
if ( preg_match("/^((?:^|\n)Foo.*)+$/", $text ) ) {
    $text = preg_replace('/^Foo /m', '', $text);
}
您还可以省略对
preg\u match
的调用,因为它是多余的,不必要的


请在此处查看它的实际操作:

注意,对于这个样本数据来说,这是过分的;如果不需要正则表达式,则应该使用

见鬼,如果每一行的格式都是
{uselesbrow}{delimiter}{importantword}
,那么您也可以使用。


请在此处查看它的实际操作:

注意,对于这个样本数据来说,这是过分的;如果不需要正则表达式,则应该使用


见鬼,如果每一行的格式总是
{uselesswigh}{delimiter}{importantword}
,那么您也可以使用。

我对正则表达式进行了一点修改,以断言每一行都以
开头的“Foo”


我稍微修改了正则表达式,以断言每一行都以
开头的“Foo”


这仍然会使OP的第二个用例失败-在任何输入中不替换
Foo
,因为
Foo
不是在每一行的开头。啊-我想第二个用例可能是一个编辑,因为我不记得在开始回答时看到过它。我会修改的。啊,答案已经选出来了。这是个好主意。那没关系。:)这仍然会使OP的第二个用例失败-在任何输入中不替换
Foo
,因为
Foo
不是在每行的开头。啊-我想第二个用例可能是一个编辑,因为我不记得在开始回答时看到过它。我会修改的。啊,答案已经选出来了。这是个好主意。那没关系。:)啊,计算测试替换的好技巧。要记住这一点。谢谢啊,计算测试替换的好技巧。要记住这一点。谢谢令人惊叹的。
(?:^ |\n)
到底是做什么的?@Martin:
?:
表示不捕获组(我表示它不应该捕获匹配,所以它要快一点)。在没有非捕获组的情况下,可以将其重写为
(^ |\n)
,这意味着字符串的开头
^
,或新行
\n
(?:^ |\n)
到底是做什么的?@Martin:
?:
表示不捕获组(我表示它不应该捕获匹配,所以它要快一点)。如果没有非捕获组,则可以将其重写为
(^ |\n)
,这意味着字符串的开头
^
,或新行
\n