Эта тема на forum.dklab.ru


Xoce: Как правильно написать регулярное выражение?
Ситуация: Мне необходимо разбить строчку "article_1.php" таким образом, чтобы извлеч кусочек между "_" и ".", т.е. в данном случае "1"

Как я это делаю:

$x1 = explode("_", "article_1.php");
$x2 = explode(".", $x1[1]);
echo $x2[0];


Вопрос: Как мою задачу решить правильно? Где про это можно почитать для новичка?
_
Евгений Галашин:
Где про это можно почитать для новичка?
www.php.net/docs/
Как мою задачу решить правильно?
Как хотите. Можно и так:

$matches=array();
preg_match("/_(.*?)\\./","article_1.php",$matches);
echo $matches[1];

Xoce:
Большое спасибо.
WingedFox:
Или так - несколько более быстрый вариант:

$matches=array();
preg_match("/_([^.]*)/","article_1.php",$matches);
echo $matches[1];

Юрий Насретдинов:
([^.]*)
Это что, "не любой символ" ? В таком случае он выдаст пустую строку.
Надо


$name="article_1.php";
$matches=array();
preg_match("/_([^\.]*)/s",$name,$matches);
echo $matches[1];

WingedFox:
Это что, "не любой символ" ?
Внимательно читаем мануал:
All non-alphanumeric characters other than \, -, ^ (at the start) and the terminating ] are non-special in character classes, but it does no harm if they are escaped.
Дмитрий Котеров:

# чистить $matches в начале не надо
preg_match("/_(\d+)\./", "article_1.php", $matches);

Юрий Насретдинов:
WingedFox:
В таком случае приношу свои извинения :). Тем не менее, как-то привычнее заслешивать точку и другие спецсимволы, чтобы не путаться
WingedFox:
yUAC:
Было бы за что извиняться 8*)
Главное - чтобы код работал.

Эта тема на forum.dklab.ru