通过正则表达式从表中获取域列表

时间:2013-06-21 21:49:24

标签: php regex

我在表格中列出了包含更多信息和

的域名
<td>example1.com</td>
<td>example2.org</td>
<td>example3.com</td>
<td>example4.com</td>

我需要使用正则表达式获取.com域名。我尝试使用类似的东西:

'<td>(.............).com'

但我能写什么而不是点?我需要使用什么?

我需要获取代码之间的数据:<td>domain.com</td> -> domain.com

'<td>([^<]+\.com)</td>' 

- 它更好,但我需要没有标签

3 个答案:

答案 0 :(得分:1)

类似的东西:

'<td>([^<]+\.com)</td>'

但你不应该使用正则表达式来解析html。

答案 1 :(得分:1)

<?php
$html = '<td>example1.com</td>
<td>example2.org</td>
<td>example3.com</td>
<td>example4.com</td>';

$matches = array();
preg_match_all('/<td>(.*?.com)<\/td>/i', $html, $matches);

var_dump($matches[1]);

打印:

array(3) {
  [0]=>
  string(12) "example1.com"
  [1]=>
  string(12) "example3.com"
  [2]=>
  string(12) "example4.com"
}

答案 2 :(得分:0)

你可以使用向前看并向后看如果你想捕捉一些东西,但要确保它被其他东西包围。在这里,我们仅捕获.com

<?php

$html = '<td>example1.com</td>
<td>example2.org</td>
<td>example3.com</td>
<td>example4.com</td>'; 

$pattern = "!(?<=<td>).*\.com*(?=</td>)!";
preg_match_all($pattern,$html,$matches);

$urls = $matches[0];

print_r($urls);

?>

输出

Array
(
    [0] => example1.com
    [1] => example3.com
    [2] => example4.com
)