正则表达式在html属性中找到子字符串

时间:2015-11-24 20:12:59

标签: php regex

<div>
  <input data-content="This is a text string with a <br /> inside of it" />
</div>

我需要一个正则表达式来查找输入标记的data-attribute标记内的所有<br />标记。

注意:页面中可能有其他<br />标记(属性之外),我不想包含这些标记,因此正则表达式只应该在数据内容属性。

谢谢!

3 个答案:

答案 0 :(得分:1)

我认为你不需要,也不应该使用正则表达式。目前还不清楚你想用找到的换行符做什么,但是这应该给你一个解析器的起点。

$string = '<div>
  <input data-content="This is a text string with a <br /> inside of it" />
</div>';
$doc = new DOMDocument();
$doc->loadHTML($string);
$inputs = $doc->getElementsByTagName('input');
foreach($inputs as $input) {
    preg_match_all('/<br\h*\/?>/', $input->getAttribute('data-content'), $linebreaks);
    print_r($linebreaks);
}

取决于您想要做什么preg_match_all可能需要也可能不需要。这一点的重要部分是$input->getAttribute('data-content')将为您提供所需数据/属性的字符串。

答案 1 :(得分:-1)

我在评论部分发出警告,您可以使用preg_replace_callback()str_replace()的组合:

$str = '<input data-content="This is a text string with a <br /> inside of it" />';
$regex = '/data-content="([^"]*)/i';
$str = preg_replace_callback($regex,
    function($matches) {
        return str_replace(array('<br/>', '<br />'), '', $matches[0]);
    },
    $str);
echo $str;
// output: <input data-content="This is a text string with a  inside of it" />

它是做什么的:在data-content之后用双引号匹配所有内容并将其替换为<br/>的变体。
再一次,最好使用解析器或xpath方法(在这里看看,有很多好的答案)。

答案 2 :(得分:-4)

试试这个正则表达式'/data-content=\".*<br\s?\/?>.*\"/imsU'