PHP正则表达式:检查是否每个文本行都以Foo开头
如果每个文本行都以Foo开头,如何在PHP中进行检查 我想删除行开头的“Foo”,但前提是每行都以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”开头的行 测试:
$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
。