【发布时间】:2014-07-08 11:19:06
【问题描述】:
我正在尝试实现客户要求,他们可以使用任意正则表达式来匹配任意文本中的模式,然后修改部分或全部匹配项的大小写。一个示例是 (sp)([\d]+),它是一个搜索表达式,用于查找字母组合“sp”后跟一个或多个数字的所有实例。相应的表达式将 sp 大写,如下所示:\U$1$2
我们通过一个 Web 界面实现对正则表达式的支持,该界面发布到一个 PHP 脚本,该脚本使用 preg_match() 和 preg_replace() PHP perl 兼容的正则表达式函数分别匹配和更改输入。
我尝试使用 preg_replace_callback 代替,因为它将匹配数组传递给您自己编写的回调,但问题是不知道匹配和替换模式,以及预先修改的输入文本,到目前为止我可以告诉我们,我们无法可靠地确定哪个匹配来自正则表达式的哪个组件,因此哪个匹配需要大写或小写。
有没有人尝试过类似的事情并取得了成功?
谢谢!
【问题讨论】:
-
让客户定义自己的表达方式有点冒险。阅读ReDOS。如果这是一个选项,请尝试提供预定义的正则表达式。