我用Google搜索并搜索了其他几十个答案,但无法找到任何可以解决以一个字符串开头的两行删除的内容,并以另一个字符串结尾,所以不包含&#34我曾尝试过什么"因为十几种模式甚至不会接近。
我们从PDF文件中提取了文本,结果中的所有链接都显示在输出中,如下所示:
[Link]
2017_07_11_RM_4b.pdf
他们始终以[Link]
开头,始终以.pdf
结尾。它们出现在整个结果中,通常连续多次,然后是一个文本块,以及更多链接,依此类推 - 多达200次出现。我试图在没有的情况下获取文本块这些带有preg_replace()
的两行字符串的出现,大概看起来像这样:
$newtext = preg_replace("/^[Link]*$/", "", $text);
感谢您的任何帮助,谢谢。
答案 0 :(得分:0)
此表达式(regex101.com处的示例)使用更改^
的{{3}}来匹配每行的开头而不是字符串的开头。
/(?:^\[Link\]\n[^\n]*+\n)++/m
$newtext = preg_replace("/(?:^\[Link\]\n[^\n]*+\n)++/m", "", $text);
附加说明
答案 1 :(得分:0)
这可能有效:
/^\[Link\]\s*(\w+)\.pdf$/m
在这里,您需要查找多行文字,其中以[Link]
开头(在这种情况下[
和]
是字面的,这就是为什么反斜杠)后跟一个空格{ {1}},在您的情况下是一个新行,然后是任意数量的字母,数字和下划线,在字符串末尾有一个\s
。
重要的是要注意这将为您想要的文本创建一个catch组,因此在您的.pdf
中,您现在应该执行以下操作:
preg_replace
答案 2 :(得分:0)
应该这样做:\[Link\][\s\S]*?\.pdf\s
演示:https://regex101.com/r/NCqWES/2/
<强>解释强>:
[\s\S]
- 这意味着我们会匹配每个空格或非空格字符,这反过来意味着我们匹配所有可能的字符,包括可能的换行符和将单词\[Link\]
与单词\.pdf
分开的空格。
*?
- 这是一个懒惰的量词,会在比赛的第一次出现时停止。
最后,我在最后添加了\s
以删除剩余的换行符,但您也可以将其删除。
<强>更新强>
这也可以起作用:\[Link\]\s\w+\.pdf\s
,给你一点性能提升。 Click for demo
答案 3 :(得分:0)
$str = <<<EOD
line1
[Link]
2017_07_11_RM_4b.pdf
line2
[Link]
2017_07_11_RM_4b.pdf
line3
EOD;
$newtext = preg_replace("/\[Link\]\R.+\.pdf\R/", "", $str);;
echo $newtext,"\n";
<强>输出:强>
line1
line2
line3
<强>解释强>
\[Link\] : literally [link]
\R : any kind of linebreak
.+ : 1 or more any character but newline
\. : a dot
pdf : literally pdf
\R : any kind of linebreak