首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除任何以特定字符串开头的行吗?

删除任何以特定字符串开头的行吗?
EN

Stack Overflow用户
提问于 2018-09-04 16:04:46
回答 2查看 61关注 0票数 0

我有以下字符串:

代码语言:javascript
复制
Q: What is your favorite color?
A: Red
Q: Who is your favorite actor?
A: George Clooney

我想留下:

代码语言:javascript
复制
A: Red
A: George Clooney

有数百个可能的问题(Q: xyz?),所以我不能只是str_replace每个特定的问题。

PHP中是否有regex函数,允许我删除以以下字符串开头的所有行:"Q:“

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-04 16:11:39

您可以使用这个简单的正则表达式

代码语言:javascript
复制
 $string = preg_replace('/^Q:.+$/m', '', $string);

我使用了m标志,它应该使^与行的开头匹配,而$则匹配行的末尾,但有些标志取决于输入是什么样的。

当测试高于沙盒时,可能会留下行尾。所以我把它修改成这个

代码语言:javascript
复制
 $string = preg_replace('/^Q:.+(?:\r\n|\r|\n)/m', '', $string);

应该把它们移走。

桑多克斯

我刚刚记得$没有捕获任何东西,所以因为它没有捕获它,所以它不会被替换。

您还可以先将数据分解成行,然后用match进行测试,如下所示

代码语言:javascript
复制
$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);

沙盒

票数 3
EN

Stack Overflow用户

发布于 2018-09-04 16:13:12

Id使用爆炸()然后使用过滤器(),例如:

代码语言:javascript
复制
<?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);

https://3v4l.org/6UKLZ

结果:

代码语言:javascript
复制
Array
(
    [1] => A: Red
    [3] => A: George Clooney
)

并返回内爆()以获得所需的结果:

https://3v4l.org/Esj98

代码语言:javascript
复制
A: Red
A: George Clooney
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52170223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档