我正在尝试实现一个客户需求,他们可以使用任意正则表达式来匹配任意文本中的模式,然后修改部分或所有匹配的大小写。例如(sp)(\d+),它是一个搜索表达式,用于查找字母组合"sp“后跟一个或多个数字的所有实例。然后,相应的表达式将sp大写如下:\U$1$2
我们通过一个web接口实现对正则表达式的支持,该接口发送到一个PHP脚本,该脚本使用与preg_match()和preg_replace() PHP perl兼容的regex函数来分别匹配和更改输入。
我尝试使用preg_replace_callback,因为它传递了您自己编写的匹配数组来回调,但问题是,在不知道匹配和替换模式以及预先修改的输入文本的情况下,据我所知,我们无法可靠地确定哪个匹配来自正则表达式的哪个组件,因此哪个匹配需要被大写或小写。
有没有人尝试过类似的东西,并取得了成功?
谢谢!
发布于 2014-07-09 00:55:37
这样就行了,您可以让应用程序要求单词匹配正则表达式不应包含组,但使用$match[0]可以确保整个单词匹配是大写的。
function _UpperCase_Preg_Matches($match){
return strtoupper($match[0]);
}
$subject = "Item sp001 and item sp002 are good.";
print preg_replace_callback( "/\bsp\d+\b/i", _UpperCase_Preg_Matches, $subject);输出:
Item SP001 and item SP002 are good.在我之前构建的一个应用程序中,我们有一个大小写单词的正则表达式,它采用一系列小规则并将它们连接在一起。
小规则应该是像PC\d{6},LAP\d{6}和SERV\d{3}这样的。然后,它们将在以下正则表达式/\b(?: rule1 | rule2 | rule3 )\b/i中连接在一起。并且匹配被传递到一个回调中以大小写。
https://stackoverflow.com/questions/24630445
复制相似问题