2010-03-06 4 views
0

quelqu'un pourrait-il m'aider avec le motif regex que je pourrais utiliser pour faire correspondre le texte "Chats" dans l'élément de lien?aider avec le motif regex

<A HREF="http://www.catingale2?subject=10023">Cats</A> forum 

Merci d'avance!

Répondre

3

Qu'en est-il quelque chose comme ceci:

$str = '<A HREF="http://www.catingale2?subject=10023">Cats</A> forum'; 
$matches = array(); 
if (preg_match('#<a[^>]*>(.*?)</a>#i', $str, $matches)) { 
    var_dump($matches[1]); 
} 

Ce qui donne:

string(4) "Cats" 


Et, comme sidenote: D'une manière générale, à l'aide regex pour "analyser" HTML est pas tout à fait un bon idée!

+0

quelle fonction pourrait-je utiliser ensuite obtenir le texte dans les éléments? – ajsie

+2

Si vous avez une partie complète de HTML * (quelque chose de plus grand que ce que vous avez posté ici, je veux dire) *, un "meilleur" moyen, dans de nombreux cas, serait d'utiliser un analyseur HTML réel; comme http://www.php.net/manual/en/domdocument.loadhtml.php, puis passez par le DOM, éventuellement en utilisant des requêtes XPath. –

2

pas besoin regex

$str=<<<EOF 
<A HREF="http://www.catingale2?subject=10023">Cats</A> forum 
<A HREF="http://www.catingale2?subject=10024"> 
Dogs</A> 
forum 
EOF; 
$s = explode("</A>",$str); 
foreach($s as $v){ 
    if (strpos($v,"<A HREF")!==FALSE){ 
     $t=explode(">",$v); 
     print end($t)."\n"; 
    } 
} 

sortie

# php test.php 
Cats 

Dogs 
2
<a[^>]*>([^<]*)<\/a> 

Voilà. Vous pourriez probablement avec:

<a[^>]*>(.*)<\/a> 

ou

<a[^>]*>([^<]*) 
1
$input = '<A HREF="http://www.catingale2?subject=10023">Cats</A> forum'; 
if(preg_match('{<a.*?>(.*?)</a>}i',$input,$matches)) { 
    $hyperlinked = $matches[1]; 
} 
echo $hyperlinked; // print Cats 

Le regex utilisé est: <a.*?>(.*?)</a>

Explication:

<a.*?> - an opening anchor tag with any attribute. 
(.*?) - match and remember between opening anchor tag and closing anchor tag. 
</a> - closing anchor tag. 
i  - to make the entire matching case insensitive 
Questions connexes