使用PHP正则表达式函数更改文本大小写

时间:2014-07-08 11:19:07

标签: php regex

我试图实现客户要求,他们可以使用任意正则表达式匹配任意文本中的模式,然后修改部分或全部匹配的大小写。一个例子是(sp)([\ d] +),它是一个搜索表达式,可以找到字母组合的所有实例" sp"后跟一个或多个数字。然后相应的表达式将sp大写如下:\ U $ 1 $ 2

我们通过Web接口实现对正则表达式的支持,该接口POSTS到PHP脚本,该脚本使用preg_match()和preg_replace()PHP perl兼容的正则表达式函数来分别匹配和更改输入。

我尝试使用preg_replace_callback,因为它将一系列匹配传递给您自己编写的回调,但问题是不知道匹配和替换模式,以及提前修改的输入文本,据我所知,我们无法可靠地确定哪个匹配来自正则表达式的哪个组件,因此哪个匹配需要大写或小写。

有没有人尝试过类似的东西并取得了成功?

谢谢!

1 个答案:

答案 0 :(得分:0)

这样的东西可行,您可以将匹配正则表达式的单词不应包含组的应用程序要求,但使用$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内联合起来。并且匹配将被传递到回调中以进行大写。