我有像字符串"X los(2) - XYZ tres"
用于搜索大写字母/单词的正则表达式?
我怎么能找到所有的大写字母和单词,并用随机数字取代它们?
从第一个字符串我应该得到"2 los(2) - 6 tres"
或"9 los(2) - 5 tres"
我的意思是一个高字应该成为一个单一的数字。
我有像字符串"X los(2) - XYZ tres"
用于搜索大写字母/单词的正则表达式?
我怎么能找到所有的大写字母和单词,并用随机数字取代它们?
从第一个字符串我应该得到"2 los(2) - 6 tres"
或"9 los(2) - 5 tres"
我的意思是一个高字应该成为一个单一的数字。
这是我该怎么做的。
使用正则表达式来查找大写字母组,并用0
和9
(十进制系统中的所有单个数字)之间的随机数字替换它们。
$str = preg_replace_callback('/[A-Z]+/', function() {
return rand(0, 9);
}, $str);
您可以使用preg_replace_callback查找大写字母,并用随机数替换它们。
$text = "X los(2) - XYZ tres";
// the callback function
function replace_with_random($matches)
{
return rand(0,9);
}
//perform the replacement
$text= preg_replace_callback(
"/[A-Z]+/",
"replace_with_random",
$text);
回调可以检查匹配文本不是一些随机执行更复杂的替代品 - 你会发现在$matches[0]
要兼容Unicode,使用unicode \p{Lu}
这意味着任何语言的任何大写字母:
$str = preg_replace_callback('/\p{Lu}+/', function() {
return rand(0, 9);
}, $str);
或者一次,合法和安全地使用'e'修饰符:'preg_replace('/ [AZ] +/e',“rand(0,9)”,$ str);' – DaveRandom 2012-03-17 09:35:41
@DaveRandom是的,如果没有捕获组插入到代码中,我猜'e'标记是安全的:) – alex 2012-03-17 09:37:24