如何使用PHP正则表达式找到两个固定标记之间的所有文本匹配?

时间:2012-05-28 23:13:48

标签: php regex

我正在寻找以下字符串(或字符串 - 可能会有很多次出现):

<!--####-->

示例:从输入<!--##HELLO##-->我需要匹配HELLO

什么是正则表达式?

4 个答案:

答案 0 :(得分:5)

(?<=<!--##).*?(?=##-->)

Lookaround是仅匹配HELLO的唯一方法。您还可以匹配整个<!--##HELLO##-->并提取其他答案中提到的捕获的组。

答案 1 :(得分:1)

正则表达式

<!--##(.*?)##-->

将文本存储在第一组中。一定要设置允许的选项。匹配换行符(/ s下面)

对于php preg,这变为

if (preg_match('/<!--##(.*?)##-->/s', $subject, $regs)) {
    $result = $regs[1];
} else {
    $result = "";
}

答案 2 :(得分:0)

/<!--##(.*?)##-->/

基本上这是对其他提供的答案执行此操作的另一种方法,因为我认为使用匹配组来删除文本比使用前瞻/后方仅匹配您要查找的内容更简单。番茄,Tom-ah-to。

答案 3 :(得分:0)

这是一个使用preg_match_all的版本,以及一个为您提供每个匹配的迭代器:

$match_list = array();
if( preg_match_all('/<!--##(.*?)##-->/s', $subject, $regs) ) {
    $match_list = $regs[1];
} else {
    echo "Warning: No matches found in: " . $subject;
}

foreach($match_list as $i=>$v) {
    echo "Match: " . $i . " : " . $v . "\n";
}