Вот моя проблема
В одном файле PHP продемонстрируйте регулярное выражение, чтобы преобразовать "123 Tree Street, Connecticut"
в "123_tree_street_connecticut"
.
Я успешно заменил пробелы и запятую _
, но не смог изменить регистр символов, используя регулярное выражение в php.
что я сделал
<?php echo preg_replace('/(,\s|\s)/', '_', '123 Tree Street, Connecticut'); ?>
Он заменяет пробелы и запятые _
но не может изменить его.
Может ли кто-нибудь объяснить мне, как это делается, используя только PHP и регулярное выражение.
Благодарю.
Поскольку замена регулярного выражения будет использовать strtolower()
, я не вижу причин не просто делать все это с помощью простых строковых функций:
<?php $str = '123 Tree Street, Connecticut'; $str = strtolower(str_replace(array(', ', ' '), '_', $str)); print_r($str); ?>
Если strtolower()
не разрешен, вы можете выполнить сдвиг в зависимости от расстояния между таблицами символов между буквами верхнего и нижнего регистра. Это не очень, но, похоже, это работает (в данном конкретном случае):
<?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('/([, ]+|[AZ])/e', "shiftToLower('\\1')", $str); print_r($str); ?>
Вместо этого используйте функцию strtolower .
Вход:
<?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
Надеюсь, это поможет вам. Благодаря!!
Я не уверен, что есть встроенное регулярное выражение для изменения случая. Но я думаю, вы можете сделать это руками, написав новое регулярное выражение для каждого персонажа.
Преобразование в верхний регистр:
$new_string = preg_replace( array('a', 'b', 'c', 'd', ....), array('A', 'B', 'C', 'D', ....), $string );
Я думаю, вы поняли.