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

replace input tag ending if this tag contains specific attribute name value

我有一个包含这个 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 包含值为 emailname,我正在尝试将结尾 >input 更改为 required>。** 这对我很重要。谢谢

所以有几件事:

  1. preg_replace 要求您使用相同的字符来开始和结束您的正则表达式。所以 "input name=email " 将不起作用 - 你会想要像 "/input name=email /"
  2. 这样的东西
  3. 您的正则表达式是错误的,因为它无法解释 html 标签中的可变性...例如,您当前的正则表达式假定 "name=email" 将紧接在 [=29= 之后] 标签 - 但即使在您自己的测试数据中也不是这种情况。 "input type="文本 名称="email""
  4. 您还在正则表达式中使用实际的 space 字符 - 最好使用白色 space 正则表达式占位符 \s

因此,您需要使用正则表达式占位符构建一个更好的正则表达式来解释一些可变性:

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

希望对您有所帮助!