正则表达式字符串大写转换为小写在PHP

问题描述:

这里是我的问题正则表达式字符串大写转换为小写在PHP

在一个单一的PHP文件,表明正则表达式"123 Tree Street, Connecticut"转换成"123_tree_street_connecticut"

我已成功替换空格和逗号_,但无法在php中使用正则表达式更改字符大小写。

我所做过的

<?php 
echo preg_replace('/(,\s|\s)/', '_', '123 Tree Street, Connecticut'); 
?> 

它代替空格和逗号与_,但不能改变它的情况。

任何人都可以指导我如何完成仅使用php和正则表达式。

谢谢。

+3

你必须用正则表达式来做它吗? – 2011-06-17 09:05:05

+1

这不是正则表达式需要解决的问题,而是使用'strtolower'。 – Jens 2011-06-17 09:05:48

+1

听起来像功课。如果是这样,那么说出来会很礼貌,并展示你迄今为止所做的事情。 – 2011-06-17 09:07:23

改用strtolower函数。

由于正则表达式替换将使用strtolower()功能,我看不出有什么理由不只是do it all用简单的字符串函数:

<?php 

$str = '123 Tree Street, Connecticut'; 
$str = strtolower(str_replace(array(', ', ' '), '_', $str)); 

print_r($str); 

?> 

如果strtolower()不“允许”,你可以进行基于转变大写字母和小写字母之间的字符表距离。它不漂亮,但它seems to work(在这种特殊情况下):

<?php 

function shiftToLower($char) { 
    $ord = ord($char); 
    return $ord < 65 || $ord > 90 ? '_' : chr($ord + 32); // 65 = A, 90 = Z 
} 

$str = '123 Tree Street, Connecticut'; 
$str = preg_replace('/([, ]+|[A-Z])/e', "shiftToLower('\\1')", $str); 

print_r($str); 

?> 

输入:

<?php 
// either use this // 
echo str_replace(',', '', str_replace(' ', '_', strtolower("123 Tree Street, Connecticut"))); 

echo "\n"; 

// or use this // 
echo str_replace(array(', ', ' '), '_', strtolower("123 Tree Street, Connecticut")); 
?> 

输出:

123_tree_street_connecticut 
123_tree_street_connecticut 

希望这有助于你。谢谢!!

我不确定是否有任何内置的regex解决方案来更改案例。但我认为你可以通过为每个角色写一个新的正则表达式来实现。

转换为大写例如:

$new_string = preg_replace(
    array('a', 'b', 'c', 'd', ....), 
    array('A', 'B', 'C', 'D', ....), 
    $string 
); 

我想你了问题的实质。