|
|
|
| здравствуйте мне нужно пропарсить HTML и вытащить из него названия песен. Я вроде все сделал, работает)) но так как это делал первый раз... хотелось бы спросить у специалистов, чтобы доавить в код, чтобы он был грамотным)))
что нужно пропарсить:
<font color="#FF0000"><b>Текущий файл</b></font>
<table border="0" cellpadding="0" cellspacing="1" bgcolor="#000000" width="60%">
<tr>
<td width="30%" bgcolor="#C0C0C0" align="center"><b>Позиция</b></td>
<td width="70%" bgcolor="#FFFFFF"> 4 </td>
</tr>
<tr>
<td width="30%" bgcolor="#C0C0C0" align="center"><b>Название файла</b></td>
<td width="70%" bgcolor="#FFFFFF"> Rephrase - The Return of Jimi Fingers </td>
</tr>
|
а вот как я его пропарсил:
$pattern = "|Текущий(.*?)Название файла(.*?)<td(.*?)>(.*?)</td>|si";
|
и еще вопросик, я вставлял конструкцию (*?) почему по одному нельзя? | |
|
|
|
|
|
|
|
для: saveliy
(11.12.2008 в 22:58)
| | > по одному
если нужно только название , то нет смысла захватывать в () то что не имеет значение
можно просто убрать лишние скобки,
или сделать (?: .....) такие подмаски
, и можно постараться меньше захватывать
например начиная с "Название файла" или с "<b>Название " (с такого символа, который реже встречается , или хотя-бы с нескольких таких символов)
$pattern = '|Название файла(?:<[^>]+>\s*)+([^<]+)</td>|';
|
и думаю всегда, когда возможно, лучше чаще применять жадные квантификаторы например + , вместо +?
, хотя как не-специалист не очень в этом уверен ,) можно просто сравнивать иногда что быстрее, но на это нужно время. | |
|
|
|