Я хочу разделить буквенно-числовые (с пробелом) и не-альфа-числовые по запятой в строке.
Я пробовал с этим …
$str = "This is !@#$%^&"; preg_replace("/([a-z0-9_\s])([^a-z0-9_])/i", "$1, $2", $str);
Но я получил этот результат …
Это, есть,! @ # $% ^ &
Как я могу исправить поисковый файл pattarn, чтобы получить этот результат?
Это,! @ # $% ^ &
Благодарю.
Вы должны были отрицать все в первой группе за вторую, вот так:
preg_replace("/([a-z0-9_\s])([^a-z0-9_\s])/i", "$1, $2", $str);
В противном случае он также разделился бы на пробелы.
Вероятно, вам придется сделать это в нескольких итерациях. Попробуй это:
$preg = array( "/([\w\s]+)/i", "/([\W\s]+)/i" ): $replace = array( "\\1, ", "\\1 " ); $result = rtrim( preg_replace( $preg, $replace, $input ) ); // rtrim to get rid of any excess spaces