在PHP中将字符串中的html代码替换为空字符串

在PHP中将字符串中的html代码替换为空字符串,php,regex,Php,Regex,我已经4-5年没有做过PHP编程了,上一次使用PHP是在2016年或2017年。我遇到了这个非常简单的问题 我有这根绳子。现在请注意不要删除任何一个空格,因为这非常重要 $s = 'Congratulations, you completed the quiz! <h2>{{result-title}}</h2> {{result-text}} You achieved {{points}} points from {{questions}} questions.\n\

我已经4-5年没有做过PHP编程了,上一次使用PHP是在2016年或2017年。我遇到了这个非常简单的问题

我有这根绳子。现在请注意不要删除任何一个空格,因为这非常重要

$s = 'Congratulations, you completed the quiz!
<h2>{{result-title}}</h2>
{{result-text}}

You achieved {{points}} points from {{questions}} questions.\n\n
        <div class="chained-quiz-email">
                <form method="POST">
                <p><label>Your email address:</label> <input type="email" name="chained_email_844640736"
                
                id="chainedUserEmail" class="chained-quiz-email " required></p>
    
     <input type="submit" id="submit-email" value="Submit" name="submit-email-btn844640736">
     </form>
            
            
            </div>
        
        ';
$s='恭喜你,你完成了测验!
{{result title}}
{{result text}}
您从{{questions}}问题中获得了{{points}}点。\n\n
您的电子邮件地址:

';
现在我只想删除这部分html代码

    <div class="chained-quiz-email">
            <form method="POST">
            <p><label>Your email address:</label> <input type="email" name="chained_email_844640736"
            
            id="chainedUserEmail" class="chained-quiz-email " required></p>

 <input type="submit" id="submit-email" value="Submit" name="submit-email-btn844640736">
 </form>
        
        
        </div>

您的电子邮件地址:

输出类似于:

Congratulations, you completed the quiz!
<h2>{{result-title}}</h2>
{{result-text}}

You achieved {{points}} points from {{questions}} questions.
恭喜你,你完成了测验!
{{result title}}
{{result text}}
你从{{questions}问题中获得了{{points}}点。
我想用正则表达式来实现它,因为我认为它可能非常有用。 我想出了这个模式,但似乎仍然不起作用返回一个空字符串。有人能帮我吗。我很感激

$regex='#\(.+?)\#s';
$regex = '#\<div class="chained-quiz-email"\>(.+?)\<\/div\>#s';
preg_match($regex, $s, $matches);
var_dump($matches[0]);
预匹配($regex,$s,$matches); var_dump($matches[0]);
您可以使用内置的php函数strip_tags()


刚刚在正则表达式上添加了一些配置

来自

$pattern = '/<div class="chained-quiz-email">.*?<\/div>/is';
$pattern='/.*?/i';
将其更改为:

<?php
$doc = new DOMDocument; 
$doc->loadHTML($s);

$thedocument = $doc->documentElement;

$selector = new DOMXPath($doc);
foreach($selector->query('//div[contains(attribute::class, "chained-quiz-email")]') as $e ) {
    // Select all child node
    $e->parentNode->removeChild($e);
}

echo $doc->saveHTML($thedocument);
$pattern='/.*?/is';
你可以查一下

对于正则表达式的实验也是非常有用的

归功于@CBroe和@Lawrence(他有另一种解决方案)

使用类


你好,艾哈迈德。。。我不是在寻找正则表达式或删除html代码的方法。实际上,这并不包括从表单中点击按钮。哦,是的,当然可以。reply updated简单分解就足够了,
$pattern='/.*?/i'
–差不多了,
/
需要转义,因为您已经将其用作分隔符,并且需要使用
s
修饰符,以便
也匹配换行符@劳伦斯·切罗尼补充道,这是一个答案。看起来good@IceBear在这种情况下,使用CBroe code然后将\n\n更改为类似于
| |
的内容,并执行拆分或在输出时删除它,尽管xy似乎可以更改字符串,只需删除它或对其执行条件以不添加它,或将其作为模板添加
{form}
然后呈现它的任何内容都会发生更改,所以如果表单未定义,则不会为其输出值
$pattern = '/<div class="chained-quiz-email">.*?<\/div>/is';
<?php
$doc = new DOMDocument; 
$doc->loadHTML($s);

$thedocument = $doc->documentElement;

$selector = new DOMXPath($doc);
foreach($selector->query('//div[contains(attribute::class, "chained-quiz-email")]') as $e ) {
    // Select all child node
    $e->parentNode->removeChild($e);
}

echo $doc->saveHTML($thedocument);