[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Переменная string $pattern в preg_match
combatlynx
Приветствую всех!

Сломал уже всю голову, никак не пойму в чем дело...
Вот такой кусок кода работает:

# If there are insertion points, but we haven't got any data, - return
if (preg_match("/\{([A-Za-z0-9\._ ]+?)}/", $blocks[$block]["content"]))
return "";


а если поставить шаблон в переменную (он позже несколько раз используется), то уже не работает:

$patt = "/\{([A-Za-z0-9\._ ]+?)}/"; // Insertion points pattern

# If there are insertion points, but we haven't got any data, - return

if (preg_match($patt, $blocks[$block]["content"]))
return "";


Методом тыка нашел, что если переменную объявить так (без слэшей):
$patt = "\{([A-Za-z0-9\._ ]+?)}";


то опять работает.

Хочу понять, отчего так, чтобы это не выстрелило позже как-нибудь некрасиво.

Спасибо!
walerus
Символ не пропущен?

$patt = "/\{([A-Za-z0-9\._ ]+?)}/"; - твое
$patt = "/\{([A-Za-z0-9\._ ]+?)\}/"; - мое
combatlynx
Цитата (walerus @ 4.12.2014 - 15:09)
Символ не пропущен?

$patt = "/\{([A-Za-z0-9\._ ]+?)}/"; - твое
$patt = "/\{([A-Za-z0-9\._ ]+?)\}/"; - мое

Ну да, символ поставлю, спасибо!

Только это не решает вопрос про переменную. С этим-то как быть?
walerus
Цитата
Вот такой кусок кода работает:

# If there are insertion points, but we haven't got any data, - return
if (preg_match("/\{([A-Za-z0-9\._ ]+?)}/", $blocks[$block]["content"]))
return "";
А что он собственно должен делать? судя по регулярке, должен находить символы указанные в паттерне, все верно?... точнее лучше напиши сам, что "оно" должно сделать.
combatlynx
Цитата (walerus @ 4.12.2014 - 15:29)
Цитата
Вот такой кусок кода работает:

# If there are insertion points, but we haven't got any data, - return
if (preg_match("/\{([A-Za-z0-9\._ ]+?)}/", $blocks[$block]["content"]))
return "";
А что он собственно должен делать? судя по регулярке, должен находить символы указанные в паттерне, все верно?... точнее лучше напиши сам, что "оно" должно сделать.

Оно ищет вставки вида {TEXT} в тексте типа:


<B>ПОСТАВЩИК:<BR>
{FIRM}<BR>
ИНН {F_INN}, КПП {F_KPP}<BR>
{F_JUR_ADDR}, тел./факс: {F_TEL}<BR>
{BANK*ACC}
</B><BR>
walerus
Файл ttt.txt
<B>ПОСТАВЩИК:<BR>
{FIRM}<BR>
ИНН {F_INN}, КПП {F_KPP}<BR>
{F_JUR_ADDR}, тел./факс: {F_TEL}<BR>
{BANK*ACC}
</B><BR>

<?php

$blocks = file_get_contents( 'ttt.txt' );

$pattern = "/\{([A-Za-z0-9\._ ]+?)\}/";

preg_match( $pattern, $blocks, $match );

echo "<pre>";
print_r($match);

Результат:
Array
(
[
0] => {FIRM}
[1] => FIRM
)
т.е. регулярка срабатывает...
проверяй условие... правильно написанно? исходя из твоего условия, если найдется вхождение, то вернуть пустоту...

$pattern = "/\{([A-Za-z0-9\._ ]+?)\}/";
if (preg_match( $pattern, $blocks[$block]["content"] ) ) // если найдено
return ""; // Вернуть ""
combatlynx
Цитата (walerus @ 4.12.2014 - 15:44)
проверяй условие... правильно написанно? исходя из твоего условия, если найдется вхождение, то вернуть пустоту...

$pattern = "/\{([A-Za-z0-9\._ ]+?)\}/";
if (preg_match( $pattern, $blocks[$block]["content"] ) ) // если найдено
return ""; // Вернуть ""

да эта фигня работает с 2006 года

Я решил только дополнить шаблон, чтобы распознавал еще и математические знаки во вставках (+-/*).

Шаблон в коде встречается трижды в виде строки, а когда я его заменяю на переменную все перестает работать... (больше ничего не трогаю! только вставляю переменную)
kristall
Дык, это же все метасимволы. Их надо бэкслешем экранировать.
http://php.net/manual/ru/reference.pcre.pattern.syntax.php

_____________
echo '<pre>',print_r($var, 1);die;

root@server# make love && war
combatlynx
Цитата (kristall @ 4.12.2014 - 15:57)
Дык, это же все метасимволы. Их надо бэкслешем экранировать.
http://php.net/manual/ru/reference.pcre.pattern.syntax.php

Не, всё ж работало до этого.

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

Мой косяк, простите, что отвлек от дел!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.