powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) Тонкости работы с регулярными выражениями
8 сообщений из 8, страница 1 из 1
(PHP) Тонкости работы с регулярными выражениями
    #33347519
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Был сегодня удивлен при составлении нового рега. :)

Оказывается, если регулярное выражение (паттерн) заключено в двойные кавычки и, например, требуется в шаблоне выделить переменную в виде $foo, то необходимо использовать двойное экранирование - \\$(.*).

Теперь на примере. Требуется пропарсить ниже указанный файл и получить в нем все пары KЛЮЧ => ЗНАЧЕНИЕ.

Сам файл (config.php):
Код: plaintext
1.
2.
3.
4.
5.
6.
<?php
$host = 'localhost';
$db_name = 'test';
$db_user = 'newbie';
$db_pass = '1234';
?>

Скрипт:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<?php
$fp = file_get_contents('config.php');

preg_match_all("/\\$(.*)\s=\s\'(.*)\';/siU", $fp, $matches, PREG_SET_ORDER);

echo '<pre>'.print_r($matches, true).'</pre>';
?>
Обратите внимание на запись \\$(.*). Честно говоря, раньше я не знал о такой особенности, чтобы получить имя переменной.
Хотя в с другой стороны все объяснимо - PHP при разборе строки шаблона "/\\$(.*)\s=\s\'(.*)\';/siU" анализирует ее на наличие переменных, т.к. строка заключена в двойные кавычки. Для того, что избежать этого используется спец. символ \. Но это пока еще строка, а если рассматривать это как регулярное выражение, то \ является спец. символом, который в свою очередь тоже следует экранировать.

Как видите, если записать рег в одинарных кавычках, то двойного \\ уже не требуется.
Код: plaintext
1.
2.
3.
...
preg_match_all('/\$(.*)\s=\s\'(.*)\';/siU', $fp, $matches, PREG_SET_ORDER);
...

Вот такая занятная вещь.

P.S. Скорее всего, это уже и написано где-то, но пока ссылку не нашел.
...
Рейтинг: 0 / 0
(PHP) Тонкости работы с регулярными выражениями
    #33347552
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
Регулярные выражения тут абсолютно не при чём, а кого-то нужно послать читать FAQ: debug + manual
hint: echo "/\\$(.*)\s=\s\'(.*)\';/siU" + echo '/\$(.*)\s=\s\'(.*)\';/siU'
...
Рейтинг: 0 / 0
(PHP) Тонкости работы с регулярными выражениями
    #33347716
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 *

Спасибо
...
Рейтинг: 0 / 0
(PHP) Тонкости работы с регулярными выражениями
    #33347896
VERS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Berkut...все...

Бред какой то
...
Рейтинг: 0 / 0
(PHP) Тонкости работы с регулярными выражениями
    #33348047
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VERS Berkut...все...

Бред какой то Если вы это утверждаете, то по крайней мере аргументируйте то, о чем говорите!
...
Рейтинг: 0 / 0
(PHP) Тонкости работы с регулярными выражениями
    #33351103
zarusjamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как можно указать preg_match искать в строке любые символы за исключением определенной последовательности?

Есть строка:
[npc=123]npc[npc]blablalba[/npc] bbbbbb [npc]bbbb[/npc]

Есть шаблон:
\[npc(=(\s))*\](.*)\[/npc\]

Необходимо, чтобы он выдал такой массив:
0=>[npc=123]npc/[npc]blablalba[/npc]
1=>=123
2=>123
3=>npc[npc]blablalba

Я знаю о конструкции .[^<символы>]*, но в моем случае нужна определенная комбинация [/npc], в любых других случаях, строка должна включать все.

Помогите, кто, чем сможет, а еще лучше, где почитать о синтаксисе регулярных выражений. Ибо в хелпах ПХП вообще мало путного написано.
...
Рейтинг: 0 / 0
(PHP) Тонкости работы с регулярными выражениями
    #33351118
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
zarusjamerИбо в хелпах ПХП вообще мало путного написано. PHP FAQ: Регулярные выражения.
...
Рейтинг: 0 / 0
(PHP) Тонкости работы с регулярными выражениями
    #33351150
zarusjamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! :)

"А ларчик просто открывался"
\[npc(=(\s+))?\](.* ? )\[/npc\]

наличие ? отключает жадный поиск...
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) Тонкости работы с регулярными выражениями
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]