Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: проблема составления шаблона
 
 автор: Koss20   (11.10.2009 в 01:30)   письмо автору
 
 

сам текст, по которому ищется имеет такие упрощенные строки
"коечто другое(текст,слово) коечто"

эта строка "другое(текст,слово)" может быть, а может и не быть, т.е. встечается как "коечто другое(текст,слово) коечто" та и просто "коечто коечто"

"коечто" нельзя откинуть, в них шаблоном тоже ищутся совпадения.
нужно запомнить только "слово"
проблема в том что с кавычками не получается.

получается типа такого: ( ( ) )
первая скобка в паре с третьей. вторая с четвертой. но парсер будет понимать как "вторая с третьей, а первая с четвертой"
как правильно составить шаблон?

  Ответить  
 
 автор: cheops   (11.10.2009 в 12:25)   письмо автору
 
   для: Koss20   (11.10.2009 в 01:30)
 

Для этого используют опережающие и ретроспективные проверки. Если не сложно приведите конкретный текст и того, что их него необходимо извлечь?

  Ответить  
 
 автор: Koss20   (12.10.2009 в 01:26)   письмо автору
 
   для: cheops   (11.10.2009 в 12:25)
 

конкретный текст не хочу приводить, чтоб не усложнять задачу. опережающие и ретроспективные проверки, на сколько я знаю, используются для точного наличия или отсутсвия опредиленной строки.
у меня другая ситуация, в тексте есть несколько строк вида "коечто другое(текст,слово) коечто" и несколько строк "коечто коечто", то есть "другое(текст,слово)" может присутствовать в строке "коечто коечто"(в которой "коечто" тоже ищется совпадение с регуляркой, поэтому я какбы упростил для прощего воспринимания), а может и нет и если "другое(текст,слово)" присутствует в "коечто другое(текст,слово) коечто", то нужно запомнить "слово" через груповое запоминание ( ), чтоб оно сохранилось в переменную.
вот не понимаю как это сделать, надеюсь на помощь.

  Ответить  
 
 автор: cheops   (12.10.2009 в 02:22)   письмо автору
 
   для: Koss20   (12.10.2009 в 01:26)
 

Давайте обозначим через коечто первую строку, через искомое то, что ищем, через другое - завершающую строку, итого имеем
коечто искомое другое

в котором нужно получить искомое. Правильно? А теперь:
1) искомое может входить в другое?
2) другое может входить в искомое?
3) коечто может входить в искомое?
4) искомое может входить в коечто?

  Ответить  
 
 автор: Koss20   (12.10.2009 в 03:18)   письмо автору
 
   для: 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, если он присутствует. но как?

  Ответить  
 
 автор: cheops   (12.10.2009 в 04:08)   письмо автору
 
   для: 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_namePREG_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>";
  }
?>

  Ответить  
 
 автор: Koss20   (13.10.2009 в 23:29)   письмо автору
 
   для: cheops   (12.10.2009 в 04:08)
 

спасибо, а как через одну регулярку сделать? чуствую что возможно :) и дальнейшая обработка результата была бы очень простой.

  Ответить  
 
 автор: heed   (14.10.2009 в 01:51)   письмо автору
 
   для: 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

  Ответить  
 
 автор: Koss20   (14.10.2009 в 04:45)   письмо автору
 
   для: heed   (14.10.2009 в 01:51)
 

спасибо. :) теперь все работает как нужно.

  Ответить  
 
 автор: Koss20   (12.10.2009 в 01:27)   письмо автору
 
   для: cheops   (11.10.2009 в 12:25)
 

(удалил дубль)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования