从字符串中删除特定字符之前和之后的所有内容。

3

你好,

我想从字符串中删除特定字符序列之前和之后的所有内容。

例如:

$string = 'TESTING<html>This is a string</html>ANOTHER TEST!!';

我希望你能够删除 <html></html> 之前和之后的所有内容,以便在将其写入数据库时,该字符串看起来像这样:
<html>This is a string</html>

重要的是,这里的字符串中保留了<html></html>。有人有想法吗?

'<html>' 不是一个字符,它是一个字符串。 - BDL
2
OP正在谈论“字符序列”。 - t.h3ads
3个回答

5

可以使用正则表达式来完成:

$str = 'TESTING<html>This is a string</html>ANOTHER TEST!!';
preg_match_all('/(<html>.*<\/html>)/', $str, $matches);
print_r($matches[1][0]);

对于多行字符串,您需要添加修饰符“m”:
$str = 'TESTING<html>This is a string</html>ANOTHER TEST!!';
preg_match_all('/(<html>.*<\/html>)/m', $str, $matches);
print_r($matches[1][0]);

不知道为什么,但这返回了一个空数组。数组([0] => Array() [1] => Array()) - Cris Kolkman
你的正则表达式正确吗?这里有一个可行的例子:http://3v4l.org/rUmBu - t.h3ads
你的字符串中有换行符吗?那么你必须在正则表达式中添加修饰符“m”。我会更新我的答案。 - t.h3ads
你确定它包含了一个开头和结尾的HTML标签吗?你能否使用类似于你在问题中提供的测试字符串来测试代码? - t.h3ads
然后请提供一个电子邮件字符串的示例。否则我们很难找到问题。 - t.h3ads
显示剩余3条评论

3

试试这样做:

// vars
$string = ' This is text before <html> and this is the text in between </html> And after there is some more text.. ';
$first = '<html>';
$last = '</html>';
// job
$start = stripos($string, $first); // first occurrence position 
$length = strripos($string, $last); // last occurrence position 
$newString = substr($string, $start, ($length-$start+strlen($last))); 
// output
var_dump($string,$start,$length,$newString);

好奇心...这里有一个可用的例子 http://3v4l.org/cVp49 (在此之前我不知道3v4l.org,感谢http://stackoverflow.com/users/3446241/typoheads) - Nolwennig
@ Nolwennig 试试这个,你就会明白我的意思:$string = ' This is text before <html> and this is the text in between </html>And after there is some more text.. '; $start = stripos($string, '<html>'); // 第一次出现的位置 $length = strripos($string, '</html>'); // 最后一次出现的位置 $newString = substr($string, $start, $length);var_dump($string,$start,$length,$newString); - Cris Kolkman

0

除了已发布的答案,您还可以使用strstr()函数来获取文本之前和之后的内容,例如:

$newstring = '<html>' . strstr($string, '<html>');
$newstring = strstr($newstring, '</html>', true) . '</html>';

注意:未定义变量sting。 - Nolwennig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接