我正在尝试将正则表达式搜索和替换字符串存储在数据库中。在运行时,我读取数据库,将字符串放入数组,然后使用 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)) 正在放置将字符串值转换为单引号字符串,因此转义字符打印为文字而不是转义字符实际表示的字符。但是,这不起作用。
这是我用来插入数据库的代码:
插入 ISG_TCS_Replacements(FindPhrase、ReplacePhrase、ReplacementGroupID、Description、IsRegEx、IsActive、ProcessGroup、ProcessSequence)
VALUES ("/([^\\r\\n]+)(\\[url)/i","$1\\r\\n\\r\\n$2", 0, "添加新行在当前不在新行上的 [url] 标签之后。", 1, 1, 0, 1);
字段是 varchar(100)。
最佳答案
问题是 \r\n 转义仅适用于双引号字符串。
print "\r\n";
而您的数据库使用情况可能类似于:
$replaceValue = '\r\n';
print "{$replaceValue}"; // uses the literal character string
您正在将带有单引号的替换字符串插入到数据库中。否则你会得到实际的换行符。 Mysql 确实在插入时对它们进行了转义,但您总是会得到原始字符串数据。
从 MySQL TEXT/CHAR 列读取与真正从文件读取没有什么不同。使用 mysqladmin 检查您的数据库,如果您看到文字 \r\n 那么就是您的问题。
(文字 '\r\n' btw 在正则表达式中有效,但在替换字符串中无效。)
别的。 ([^\r\n+]) 可能意味着 ([^\r\n]+)。量词必须在字符类之外。
关于php - 为什么使用 PHP 从数据库中读取转义字符,在正则表达式替换期间显示为输出中的普通文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5688934/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我正在使用puppet为ruby程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这
如何匹配未被反斜杠转义的平衡定界符对(其本身未被反斜杠转义)(无需考虑嵌套)?例如对于反引号,我试过了,但是转义的反引号没有像转义那样工作。regex=/(?!$1:"how\\"#expected"how\\`are"上面的正则表达式不考虑由反斜杠转义并位于反引号前面的反斜杠,但我愿意考虑。StackOverflow如何做到这一点?这样做的目的并不复杂。我有文档文本,其中包括内联代码的反引号,就像StackOverflow一样,我想在HTML文件中显示它,内联代码用一些spanMaterial装饰。不会有嵌套,但转义反引号或转义反斜杠可能出现在任何地方。
它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput