如果此标记包含特定的属性名称值,则替换输入标记结尾

时间:2016-12-09 19:42:47

标签: php regex preg-replace

我有包含这个html字符串的变量。我希望将当前标记结束>更改为required>。我真的很难理解preg_replace所以请写信给我如何构建正确的正则表达式。

$htmlVariable =' <div class="outer required">
                <div class="form-group af-inner">
                    <label class="sr-only" for="name">~name~</label>
                    <input type="text" name="name" id="name" placeholder="~Name~" value="" size="30" data-toggle="tooltip" title="" class="form-control placeholder" >
                </div>
            </div>

            <div class="outer required">
                <div class="form-group af-inner">
                    <label class="sr-only" for="email">~mail~</label>
                    <input type="text" name="email" id="email" placeholder="~Email~" value="" size="30" data-toggle="tooltip" title="" class="form-control placeholder" >
                </div>
            </div>';

   $out = preg_replace("<input name=email  (>)","required>",$htmlVariable);

如果input包含值>的{​​{1}},我会尝试将required>结束input更改为name。** 这对我很重要。感谢

1 个答案:

答案 0 :(得分:2)

所以有一些事情:

  1. preg_replace要求您使用相同的字符来开始和结束正则表达式。所以&#34;输入姓名=电子邮件&#34;不起作用 - 你会想要像&#34; /输入名称=电子邮件/&#34;
  2. 你的正则表达式是错误的,因为它无法解释html标签的可变性......例如,你当前的正则表达式假定&#34; name = email&#34;将在&#34;输入&#34;之后标签 - 但即使在您自己的测试数据中也不是这样。 &#34;输入 type =&#34; text&#34; name =&#34; email&#34;&#34;
  3. 您还可以使用正则表达式中的实际空格字符 - 最好使用空格正则表达式占位符\ s
  4. 因此,您需要使用正则表达式占位符字符构建一个更好的正则表达式来解释一些变化:

    $out = preg_replace("/(<input.*?name\s*?=[\s*?\'\"]email[\'\"].*?)>/","$1 required>",$htmlVariable);
    

    希望这有帮助!