我有以下字符串:
Q: What is your favorite color?
A: Red
Q: Who is your favorite actor?
A: George Clooney我想留下:
A: Red
A: George Clooney有数百个可能的问题(Q: xyz?),所以我不能只是str_replace每个特定的问题。
PHP中是否有regex函数,允许我删除以以下字符串开头的所有行:"Q:“
发布于 2018-09-04 16:11:39
您可以使用这个简单的正则表达式
$string = preg_replace('/^Q:.+$/m', '', $string);我使用了m标志,它应该使^与行的开头匹配,而$则匹配行的末尾,但有些标志取决于输入是什么样的。
当测试高于沙盒时,可能会留下行尾。所以我把它修改成这个
$string = preg_replace('/^Q:.+(?:\r\n|\r|\n)/m', '', $string);应该把它们移走。
桑多克斯
我刚刚记得$没有捕获任何东西,所以因为它没有捕获它,所以它不会被替换。
您还可以先将数据分解成行,然后用match进行测试,如下所示
$string = 'Q: What is your favorite color?
A: Red
Q: Who is your favorite actor?
A: George Clooney';
$lines = preg_split("/[\r\n]+/",$string);
$fixed = [];
foreach($lines as $line) if(!preg_match('/^Q:/', $line)) $fixed[] = $line;
echo implode(PHP_EOL, $fixed);沙盒
发布于 2018-09-04 16:13:12
Id使用爆炸()然后使用过滤器(),例如:
<?php
$str = 'Q: What is your favorite color?
A: Red
Q: Who is your favorite actor?
A: George Clooney';
$array = explode(PHP_EOL, $str);
// get answers
$answers = array_filter($array, function ($value) {
return substr($value, 0, 3) === 'A: ';
});
print_r($answers);结果:
Array
(
[1] => A: Red
[3] => A: George Clooney
)并返回内爆()以获得所需的结果:
A: Red
A: George Clooneyhttps://stackoverflow.com/questions/52170223
复制相似问题