我已经做了一些挖掘,似乎无法找到这个问题的确切答案。我试过在线正则表达式测试无济于事。我试图从2点之间的字符串中删除文本。
以下是字符串的示例:
##- Please type your reply above this line -## Awesome service Message-Id:5HKR22W0_53adb264b3dc5_63f13f80dc4b33f824958ec_sprut - 3 days ago
我想修剪字符串只说Awesome service
。
因此,我需要删除##
以及介于两者之间的所有内容,以及Message-ID
到sprut
。
我怎样才能做到这一点?
编辑:为了清楚,我试图将其压缩成一个php表达式。这就是我所做的不起作用:
<?php
if(preg_match('##(.*?)##\\s*(.+?)\\s*Message-Id:.*$',$tweet['tweet'],$matches)) $tweet['tweet'] = $matches[1];
echo (string) trim($tweet["tweet"]);
?>
答案 0 :(得分:0)
您可以使用##
轻松匹配##
和##(.*?)##
之间的部分。在消息ID之后删除所有内容也很简单:Message-Id:.*
。加入到一起你有~##(.*?)##\\s*(.+?)\\s*Message-Id:.*$~
,你可以轻松使用其中一个:
$regex = '~##(.*?)##\\s*(.+?)\\s*Message-Id:.*$~';
// Use replace
$data = preg_replace( $regex, '$2', $data);
// Or match
$matches = array();
if( preg_match($regex, $data, $matches)){
$data = $matches[2];
}
生活示例here。
答案 1 :(得分:0)
preg_match("!## (.+) Message.+ - (.+)!", $your_text, $taken)
如果他们是'isset'获取了被捕获的单词$ [1]和$ take [2]
答案 2 :(得分:0)
您可以使用:
$re = "/##.*?## *| Message-Id:.*$/";
$str = "##- Please type your reply above this line -## Awesome service Message-Id:5HKR22W0_53adb264b3dc5_63f13f80dc4b33f824958ec_sprut - 3 days ago";
$result = preg_replace($re, '', $str); // Awesome service
答案 3 :(得分:0)
您可以使用正向前瞻和后视来提取Awesome Service
和##
之间的字符串Message-ID
。
<?php
$mystring = "##- Please type your reply above this line -## Awesome service Message-Id:5HKR22W0_53adb264b3dc5_63f13f80dc4b33f824958ec_sprut - 3 days ago";
$regex = '~.*(?<=##\s)(.*)(?= Message-Id:).*~';
$replacement = "$1";
echo preg_replace($regex, $replacement, $mystring);
?> //=> Awesome service