PHP регулярное выражение заменить?

Я хочу разделить буквенно-числовые (с пробелом) и не-альфа-числовые по запятой в строке.

Я пробовал с этим …

$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