|
|
|
| сам текст, по которому ищется имеет такие упрощенные строки
"коечто другое(текст,слово) коечто"
эта строка "другое(текст,слово)" может быть, а может и не быть, т.е. встечается как "коечто другое(текст,слово) коечто" та и просто "коечто коечто"
"коечто" нельзя откинуть, в них шаблоном тоже ищутся совпадения.
нужно запомнить только "слово"
проблема в том что с кавычками не получается.
получается типа такого: ( ( ) )
первая скобка в паре с третьей. вторая с четвертой. но парсер будет понимать как "вторая с третьей, а первая с четвертой"
как правильно составить шаблон? | |
|
|
|
|
|
|
|
для: Koss20
(11.10.2009 в 01:30)
| | Для этого используют опережающие и ретроспективные проверки. Если не сложно приведите конкретный текст и того, что их него необходимо извлечь? | |
|
|
|
|
|
|
|
для: cheops
(11.10.2009 в 12:25)
| | конкретный текст не хочу приводить, чтоб не усложнять задачу. опережающие и ретроспективные проверки, на сколько я знаю, используются для точного наличия или отсутсвия опредиленной строки.
у меня другая ситуация, в тексте есть несколько строк вида "коечто другое(текст,слово) коечто" и несколько строк "коечто коечто", то есть "другое(текст,слово)" может присутствовать в строке "коечто коечто"(в которой "коечто" тоже ищется совпадение с регуляркой, поэтому я какбы упростил для прощего воспринимания), а может и нет и если "другое(текст,слово)" присутствует в "коечто другое(текст,слово) коечто", то нужно запомнить "слово" через груповое запоминание ( ), чтоб оно сохранилось в переменную.
вот не понимаю как это сделать, надеюсь на помощь. | |
|
|
|
|
|
|
|
для: Koss20
(12.10.2009 в 01:26)
| | Давайте обозначим через коечто первую строку, через искомое то, что ищем, через другое - завершающую строку, итого имеем
в котором нужно получить искомое. Правильно? А теперь:
1) искомое может входить в другое?
2) другое может входить в искомое?
3) коечто может входить в искомое?
4) искомое может входить в коечто? | |
|
|
|
|
|
|
|
для: cheops
(12.10.2009 в 02:22)
| | всетаки нагляднее будет лучше
есть такие строки в хтмл коде
<div class="biografia">
<b id="user39">Ирина</b> <span id="m39">[Алегрова]</span> <small><a href='/user39'>~Ир@чка~</a></small>
</div>
|
и
<div class="biografia">
<b id="user52">АнDрей</b> <span id="m52"><a href='javascript: bio(52,9855);'>Ульянов</a></span> <small><a href='/user52'>Андреос</a></small>
</div>
|
имя и фамилию у меня получается нормально извлечь
preg_match_all('#user\d+">(.+?)</b> <span id="m\d+">(.+?)</span>#iu', $result, $autor_and_name, PREG_SET_ORDER);
print_r($autor_and_name);
|
а вот если изменяю шаблон с ява скриптом на биографию
preg_match_all('#user\d+">(.+?)</b> <span id="m\d+">(?:<a href=\'javasсript: bio\(\d+,(\d+)\);\'>){0,}(.+?)(?:</a>){0,}</span>#iu', $result, $autor_and_name, PREG_SET_ORDER);
print_r($autor_and_name);
|
получается не то что нужно, а нужно всеголишь извлечь номер 9855, если он присутствует. но как? | |
|
|
|
|
|
|
|
для: Koss20
(12.10.2009 в 03:18)
| | Хм... а вы хотите извлечь данные обязательно при помощи одного регулярного выражения? Может удобнее будет воспользоваться двумя?
<?php
$pattern = '#user\d+">(.+?)</b> <span id="m\d+">(?:<a href=\'javasсript: bio\(\d+,(\d+)\);\'>){0,}(.+?)(?:</a>){0,}</span>#iu';
preg_match_all($pattern, $result, $autor_and_name, PREG_SET_ORDER);
$pattern = "#<a href=\'javascript: bio\(\d+,(\d+)\);\'>(.+?)$#iu";
for($i = 0; $i < count($autor_and_name); $i++)
{
if(strpos($autor_and_name[$i][3], "href"))
{
preg_match($pattern, $autor_and_name[$i][3], $out);
echo $out[1]." ".$out[2]."<br>";
}
else echo "0 ".$autor_and_name[$i][3]."<br>";
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(12.10.2009 в 04:08)
| | спасибо, а как через одну регулярку сделать? чуствую что возможно :) и дальнейшая обработка результата была бы очень простой. | |
|
|
|
|
|
|
|
для: Koss20
(13.10.2009 в 23:29)
| | у меня Ваше выражение работаает
<pre><?
$result= <<<TXT
всетаки нагляднее будет лучше
есть такие строки в хтмл коде
<div class="biografia">
<b id="user39">Ирина</b> <span id="m39">[Алегрова]</span> <small><a href='/user39'>~Ир@чка~</a></small>
</div>
<div class="biografia">
<b id="user52">АнDрей</b> <span id="m52"><a href='javascript: bio(52,9855);'>Ульянов</a></span> <small><a href='/user52'>Андреос</a></small>
</div>
TXT
;
preg_match_all('#user\d+">(.+?)</b> <span id="m\d+">(?:<a href=\'javascript: bio\(\d+,(\d+)\);\'>)?(.+?)(?:</a>)?</span>#iu', $result, $autor_and_name, PREG_SET_ORDER);
print_r($autor_and_name);
?>
число 9855 извлекается
, возможно что-то перепутанно из символов в части выражения где
<a href='javascript: bio
, или заменяйте пробелы на \s* или \s+
// была неанглийская буква i в слове javascript | |
|
|
|
|
|
|
|
для: heed
(14.10.2009 в 01:51)
| | спасибо. :) теперь все работает как нужно. | |
|
|
|
|
|
|
|
для: cheops
(11.10.2009 в 12:25)
| | (удалил дубль) | |
|
|
|