2013-07-24 6 views
0

У меня есть код, подобный onclick=window.location='abc.html'> lala, я хочу сделать регулярное выражение, чтобы сократить это отвечать следующим ТРЕБОВАНИЯ:Regex не вырезать строку до специальных символов

  1. если есть > то результат должен быть > lala
  2. если не > то строка будет сократить до места, и результат будет только lala

я сделал после preg_replace, но я не прав, что про я проблема?

$text=preg_replace('/(onclick)(.*?)(>|\s)/','',$text); 
+0

другими словами, вы пытаетесь удалить все OnClick атрибуты HTML-страницы? –

+0

** Не используйте регулярные выражения для анализа HTML **. Вы не можете достоверно разобрать HTML с регулярными выражениями, и вы столкнетесь с печалью и разочарованием в будущем. Как только HTML изменится с ваших ожиданий, ваш код будет сломан. См. Http://htmlparsing.com/php для примеров того, как правильно анализировать HTML с PHP-модулями, которые уже были написаны, протестированы и отлажены. –

ответ

0
<?php 
echo preg_replace('/(onclick)(.*?)((?=>)|\s)/','',"onclick=window.location='abc.html'> lala"); 
echo preg_replace('/(onclick)(.*?)((?=>)|\s)/','',"onclick=window.location='abc.html' lala"); 
?> 

Вы должны сделать поиск для> смотреть в будущее, чтобы он не захватываются и заменить. (? =>)

0
$text = preg_replace('/onclick.+?((\s|>).+)/', "$1", $text); 
+0

извините, только один правильный ответ разрешен для выбора – onegun

0

Чистый способ сделать это состоит в использовании DOM, например:

$doc = new DOMDocument(); 
@$doc->loadHtml($yourHtmlDocument); 
$xpath = new DOMXPath($doc); 
$tags = $xpath->query("//*[@onclick]"); 
foreach ($tags as $tag) { 
    $tag->removeAttribute('onclick'); 
} 
$result = $doc->saveHtml(); 
Смежные вопросы