2015-11-24 3 views
-5
<div> 
    <input data-content="This is a text string with a <br /> inside of it" /> 
</div> 

Мне нужно регулярное выражение, чтобы найти теги <br /> внутри тега атрибута данных входного тега.Regex найти подстроку внутри атрибута html

Примечание: Там могут быть и другие <br /> теги на странице (вне атрибутов), которые я не хочу включать, поэтому регулярное выражение должно тянуть только данные внутри атрибута данных-контента.

Спасибо!

+8

Нельзя. Для этого используйте [парсер] (http://php.net/manual/en/book.simplexml.php). Кроме того, варианты этого вопроса были [заданы до] (http://stackoverflow.com/questions/3577641/how-do-you-parse-and-process-html-xml-in-php/3577662#3577662) – Jan

+0

Я знаю о лучших методах, но мне все же нужно это сделать. Предположим, я просто хочу найти подстроку внутри подстроки. Та же концепция ... – Slickrick12

+0

В это время да, это все входы. Хотя основной константой является атрибут 'data-content', который не используется нигде, насколько я знаю. – Slickrick12

ответ

-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 (смотрите здесь, на SO, есть много хороших ответов).

-4

Попробуйте это регулярное выражение '/data-content=\".*<br\s?\/?>.*\"/imsU'

+0

Это просто находит целую цепочку между тегами, если она содержит
. Не то, что мне нужно =/ – Slickrick12

+0

Это регулярное выражение отбрасывает все остальные
s на странице, просто добавьте группы захвата в это регулярное выражение –

+0

Можете ли вы обновить свой ответ, включив в него свое предложение? – Slickrick12

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') предоставит вам строку данных/атрибутов, которые вы хотите.