Как распечатать и сохранить регулярные выражения в PHP и MYSQL - PullRequest
0 голосов
/ 15 октября 2019

Мне нужно иметь возможность хранить и отображать регулярные выражения. В моем случае пользователь вводит регулярное выражение в форму, и эту точную последовательность символов необходимо вывести на экран через некоторое время. Проблема в том, что эхо меняет символы.

Так, например, я попробовал это

$regex = '(?<=amount\">\$)(.*?)(?=</strong>)';

, но когда я его повторяю ..

echo $ regex;

Я получаю ...

((((amount\">\$)(.*?)(?=)

Если я сделаю это

$ regex = htmlentities ($ regex);

Я получу это, что помогло сотсутствующая часть регулярного выражения, но не кратное ((((

((((amount\">\$)(.*?)(?=</strong>

htmlspecialchars тоже не помогло.

Как мне заставить его отображать переменную в точности так, как она написана? И что мне нужно сделать, чтобы сохранить их в MySQL и получить их точно так, как написано?

EDIT - в ответ на некоторые замечания ниже я добавлю немного больше деталей. Этот новый пример был сделан на PHP 7.1сервер в облаке, Centos 7 отображается с использованием Chrome.

$regex = '(?<=amount\">\$)(.*?)(?=</strong>)';

$page_elements_regex[1][0] = $regex;
$page_elements_regex[1][1] = addslashes($regex);
$page_elements_regex[1][2] = htmlspecialchars($regex);
$page_elements_regex[1][3] = htmlentities($regex);

echo "regex  " . $page_elements_regex[1][0] . "<BR>";
echo "addslashes  " . $page_elements_regex[1][1] . "<BR>";
echo "htmlspecialcharacters  " . $page_elements_regex[1][2] . "<BR>";
echo "htmlentities  " . $page_elements_regex[1][3] . "<BR>";

Results

regex ((((amount\">\$)(.*?)(?=)
addslashes ((((amount\\\">\\$)(.*?)(?=)
htmlspecialcharacters ((((amount\">\$)(.*?)(?=</strong>)
htmlentities ((((amount\">\$)(.*?)(?=</strong>)

Это также большая подсказка, что если вы снимите первый (как этот

*)1031 *

Результат удаляет первое a из суммы !! Это интерпретирует регулярное выражение вместо его повторения?

 ?(((mount\">\$)(.*?)(?=)

1 Ответ

0 голосов
/ 15 октября 2019

Я решил это, и я чувствую себя немного глупо с ответом. Виноват.

Где-то еще в моем коде у меня было это

$regex[1] = '(?<=amount\">\$)(.*?)(?=</strong>)';
$regex[2] = '(?<=amount\">\$)(.*?)(?=</strong>)';
$regex[3] = '(?<=amount\">\$)(.*?)(?=</strong>)';

Я понятия не имею, почему это дало результат, а не прямую ошибку, но однажды удалив все это нормально. Суть в том, что как htmlspecialcharacters, так и htmlentities дают правильный ответ, усвоил урок. Проверьте весь код, моя ошибка заключалась в использовании массивов, определяющих $ regex как массив и переменную, а не так, как я сначала думал здесь.

...