2013-09-25 4 views
2

Я пытаюсь получить все между тегами (и) с помощью regex. Я новичок в этом, но я пробовал следующее:Regex - найти все между <td> тегами

$html = file_get_contents($inputUrl); 
preg_match_all('<td>([^"]*)</td>/', $html, $result); 

foreach ($result as $val) { 
    print $val."<br>"; 
} 

Я думаю, что синтаксис моего регулярного выражения неверен. Я получаю следующую ошибку:

Warning: preg_match_all() [function.preg-match-all]: Unknown modifier '(' in C:...\tester.php on line 5

Warning: Invalid argument supplied for foreach() in C:...\tester.php on line 7

Btw Мне нужно использовать регулярное выражение для выполнения этой задачи! Так что не нужно никаких предложений об использовании «разбора XML» и т.д.

Любая помощь будет принята с благодарностью

+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – jerdiggity

+0

Лучший способ может быть ... '$ dom = new DOMDocument; $ dom-> loadHTML ($ html); ' –

+0

Что делать, если у вас есть вложенные' 'теги? Вы хотите получить все разные '' или самые отдаленные? – Jerry

ответ

3

Используйте следующее рабочий код:

$mpmatch = "!<td>(.*?)</td>!is"; 
$str = "<td>sdfdfdfdsfds</td><td>333333333</td>"; 
preg_match_all($mpmatch, $str, $result); 
foreach ($result as $val) { 
    echo "<pre>"; 
    print_r($val); 
} 

Надеется, что это поможет.

+0

! (. *?)! Был на самом деле лучше,/ ([^ "] *) <\/td>/dind't действительно исправить мою проблему. Спасибо! – Langkiller

+0

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

1

Вы пропустили первый и разделители вам нужно бежать / или использовать различные разделители

preg_match_all('/<td>([^"]*)<\/td>/', $html, $result); 
        ^---- 

Или:

preg_match_all('#<td>([^"]*)</td>#', $html, $result); 

Кроме того, вам нужно использовать жадный матч:

preg_match_all('#<td>(.*?)</td>#s', $html, $result); 
+1

Черт, ты избил меня. – MisterBla

+0

ahh да, конечно, большое спасибо Джейсону .. и Ричарду я догадываюсь :) btw do u знаю, почему мой вопрос получил проголосовали, я его не получаю:/ – Langkiller

+0

'(. *?)' На самом деле называется ленивым матчем ... – Jerry

Смежные вопросы