Помогите с регулярным выражением

Gordon

Новичок
Помогите с регулярным выражением

Уже второй день мучаюсь, перечитал раз 5 статью про регулярные выражения... В общем не могу понять... в чем проблема. Подскажите пожалуйста.

Когда я пишу например, такое выражение:

PHP:
preg_match_all("/(?:href=)(.*)(?:">  )/",$page,$Num);
Почему то что идет в скобках с "?:" тоже попадает в значение массива? По итогам прочтения статьи я так понял, что в результат должно попасть только то что в скобках без "?:". В статье четко написано:

Вам нужно запоминать что стояло между фамилией и отчеством, пробел или точка? Мне нет! Поэтому из сохраняющих и группирующих скобок делаем только группирующие: (?:\s|\.)
Т.е. то же сделал и я но почему в результате все вместе с результатом из скобок?
 

Splurov

Новичок
Осталось, кроме статьи, прочитать документацию к функции preg_match_all и сразу станет ясно откуда.
 

Gordon

Новичок
угу, теперь понял откуда ноги растут ушел читать, спасибо, что подсказали...
 

korpus

злой бобёр
Splurov,
Gordon
?: должны убирать подвыражение в круглых скобках из массива $Num в случае и preg_match и preg_match_all.
Потестите код
Код:
<?php
error_reporting(E_ALL | E_STRING);
ini_set("display_errors", 1);

$reg='#(?:abc)+.{1,2}#ui';
$str='abcabc222';
if (preg_match_all($reg, $str, $matches))
{
echo '<pre>';
print_r($matches);
echo '<pre>';
}

?>
Возможно у Gordon глюк случился, которые и у меня с регулярными выражениями случаются.
 
Сверху