php - 如何在 PHP 和 MYSQL 中打印和存储正则表达式(正则表达式)
问题描述
我需要能够存储和回显正则表达式。在我的情况下,用户将正则表达式输入到表单中,并且需要稍后将确切的字符序列回显到屏幕上。问题是回声改变了字符。
所以例如我试过这个
$regex = '(?<=amount\">\$)(.*?)(?=</strong>)';
但是当我回应它时..
回声$正则表达式;
我得到...
((((amount\">\$)(.*?)(?=)
如果我这样做
$regex = htmlentities($regex);
我得到了这个,它有助于正则表达式的缺失部分,但不是倍数 ((((
((((amount\">\$)(.*?)(?=</strong>
htmlspecialchars 也没有帮助。
如何让它完全按照写入的方式回显变量?我需要做什么才能将它们存储在 MySQL 中并完全按照所写的方式检索它们?
编辑 - 针对下面的一些观察,我添加了更多细节。这个新示例是在云中的 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>";
结果
regex ((((amount\">\$)(.*?)(?=)
addslashes ((((amount\\\">\\$)(.*?)(?=)
htmlspecialcharacters ((((amount\">\$)(.*?)(?=</strong>)
htmlentities ((((amount\">\$)(.*?)(?=</strong>)
这也是一个很大的线索,如果你脱掉第一个(像这样
$regex = '?<=amount\">\$)(.*?)(?=</strong>)';
结果去掉了第一个a的金额!!它是在解释正则表达式而不是回显它吗?
?(((mount\">\$)(.*?)(?=)
解决方案
我已经解决了,感觉这个答案有点傻。我的错。
在我的代码的其他地方我有这个
$regex[1] = '(?<=amount\">\$)(.*?)(?=</strong>)';
$regex[2] = '(?<=amount\">\$)(.*?)(?=</strong>)';
$regex[3] = '(?<=amount\">\$)(.*?)(?=</strong>)';
我不知道为什么这会给出结果,而不是直接错误,但是一旦删除它就一切正常。底线是 htmlspecialcharacters 和 htmlentities 都给出了正确的答案,经验教训。检查所有代码,我的错误是在使用数组时,将 $regex 定义为数组和变量,而不是我在这里最初想的那样。
推荐阅读
- python - 在python中获取特定包的依赖树
- c# - 如何检查 API 请求中的价值声明 (ASP.NET Core 2.2)
- python - Python3:如何将 PRINTed 项目转换为变量,以及如何将 VARIABLE 打印到 Excel 中的单元格中?
- mongodb - mongoDB 找到一个引发警报的查询
- sql - 当列数发生变化时将数据插入 SQLite 表的动态方式
- c# - 统一库函数总是返回 0
- firebase - Firestore DocumentSnapshot 存在安全规则问题
- javascript - react-router-dom 中带有 BrowserRouter 的动态基本名称
- go - 在 Golang 中管理多种返回类型
- python - 在python中获取IP地址的所有FQDN