PHP RegEx删除特定字符之间的字符

时间:2014-07-01 14:39:44

标签: php regex

我已经做了一些挖掘,似乎无法找到这个问题的确切答案。我试过在线正则表达式测试无济于事。我试图从2点之间的字符串中删除文本。

以下是字符串的示例:

##- Please type your reply above this line -## Awesome service Message-Id:5HKR22W0_53adb264b3dc5_63f13f80dc4b33f824958ec_sprut - 3 days ago

我想修剪字符串只说Awesome service

因此,我需要删除##以及介于两者之间的所有内容,以及Message-IDsprut

我怎样才能做到这一点?

编辑:为了清楚,我试图将其压缩成一个php表达式。这就是我所做的不起作用:

<?php 

if(preg_match('##(.*?)##\\s*(.+?)\\s*Message-Id:.*$',$tweet['tweet'],$matches)) $tweet['tweet'] = $matches[1];
echo (string) trim($tweet["tweet"]);

?>

4 个答案:

答案 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

Working Demo

答案 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

Working DEMO