2017-05-08 3 views
1

Iが表示されている>文字列が正規表現は、「

<td align='left'style='font-family: Courier New;'> 
 
\t Therapeutic target for gout patients: <6.0 mg/dL 
 
</td> 
 
<td class='tableCell'> 
 
\t < OR = 30 
 
</td>

聞くようにこの

$string = preg_replace('/:(*<)/', " &lt; ", $string); 
$DOM = new DOMDocument(); 
libxml_use_internal_errors(true); // Hide warnings 
$DOM->loadHTML($string); 
$rows = $DOM->getElementsByTagName('tr'); 
for ($i = 0; $i < $rows->length; $i++) 
{ 
    echo "<HR/>"; 
    $cols = $rows->item($i)->getElementsbyTagName('td'); 
    for ($j = 0; $j < $cols->length; $j++) 
    { 
     echo "<br/>".$cols->item($j)->nodeValue; 
    } 
} 

まず< tdのための私のコードである必要があり、一部の特殊文字で< within を交換します痛風患者の治療目標< 6.0 mg/dL」とセコndが空白を示しています。私は両方のデータを取得するのに役立つ表現を教えてください。

ありがとうございます。

答えて

1

DOMDocumentここではregexを使用して<&lt;に変換しています。

正規表現:spaceため/<(?=[\d\s])/

<(?=[\d\s])一致<と正の先読みまたはdigit

Try this code snippet here

<?php 

ini_set('display_errors', 1); 
libxml_use_internal_errors(true); 
$string='<td align="left" style="font-family: Courier New;"> 
    Therapeutic target for gout patients: <6.0 mg/dL 
</td> 
<td class="tableCell"> 
    < OR = 30 
</td>'; 
$string = preg_replace('/<(?=[\d\s])/', " &lt; ", $string); 
$domDocument= new DOMDocument(); 
$domDocument->loadHTML($string); 
$domDocument->encoding="utf-8"; 
foreach($domDocument->getElementsByTagName("td") as $value) 
{ 
    echo $value->textContent; 
    echo PHP_EOL; 
} 

出力:サヒールGulatiが使用したものよりも少し残酷な正規表現を使用して

Therapeutic target for gout patients: < 6.0 mg/dL < OR = 30

+0

ありがとうございますSahilそれは動作します。 –

+0

確かに、私は自分のコードでこれを実装しました。 –

+0

@Ravikhatri私の投稿を受け入れていただきありがとうございます:) –

1

$string = preg_replace('/[<](?=[^>]+[<])/', "&lt;", $string); 

は、それはそう、それはタグの一部である<を無視する代わりに>
の<が続いている<を探します。