我试图在数据库中存储正则表达式搜索和替换字符串。在运行时,我读取数据库,将字符串放入数组中,然后使用PHP preg_replace()方法更新由用户编写的大字符串,并使用客户端需要的修复程序。
下面是我使用的一个示例字符串对:
搜索字符串:/([^'r'n+])('[url)/i
替换字符串:$1'n'n$2
如果我把字符串放在这样的代码中:
preg_replace("/([^'r'n]+)('[url)/i", "$1'r'n'r'n$2", ProcessString);
一切都很美好。这将查找bbCode标记"[url"的实例,该实例的前面没有回车/换行组合,并将其放置在"[url"标记前面。
然而,当我使用数据库(MySql)中的字符串运行代码时,"'r'n'r'n"打印字面量,而不是实际创建回车换行。字符串显示在HTML的"textarea"标签中。
我已经看了单引号和引号字符串之间的差异,我的问题似乎是这样,我假设?认为问题是,字符串来自数据库或插入到数组中,我通过循环创建为单引号字符串,我尝试了这个:
preg_replace($findKey, "{$replaceValue}", ProcessString);
其中$replaceValue =字符串'$1'r'n'r'n$2'(再次,我假设从数据库读取和/或将值放入数组(mysql_fetch_assoc($result)))将字符串值放入单引号字符串中,因此转义字符作为字面量打印,而不是转义字符实际表示的字符。然而,这并没有奏效。
下面是我用来插入数据库的代码:
INSERT INTO ISG_TCS_Replacements (FindPhrase, ReplacePhrase, ReplacementGroupID, Description, IsRegEx, IsActive, ProcessGroup, ProcessSequence)
VALUES ("/([^''r''n]+)(''[url)/i","$1''r''n''r''n$2", 0, "Add a new line after [url] tags that are not on a new line currently.", 1, 1, 0, 1);
字段为varchar(100)
问题是'r'n
转义只适用于双引号字符串。
print "'r'n";
而您的数据库使用情况可能类似于:
$replaceValue = ''r'n';
print "{$replaceValue}"; // uses the literal character string
您正在将带有单引号的替换字符串插入到DB中。否则你会得到真正的换行符。Mysql在插入的时候会转义它们,但是你总是会得到原始字符串数据。
从MySQL的TEXT/CHAR列中读取与从文件中读取没有什么不同。用mysqladmin检查你的数据库,如果你看到文字'r'n
,那么你的问题就出现了。
(字面量''r'n'
btw在正则表达式中工作,但在替换字符串中不工作。)
别的东西。([^'r'n+])
可能是指([^'r'n]+)
。量词必须在字符类之外