Я хочу заменить все буквы без буквы и числа, т. Е. /&%#$
т.д. с подчеркиванием (_)
и заменить все '
(одинарные кавычки) на " «пустое (поэтому нет подчеркивания).
Так что « Там не было бы » (без учета двойных кавычек) станет « There_wouldnt_be_any ».
Я бесполезен в рег-выражениях, следовательно, пост.
ура
$newstr = preg_replace('/[^a-zA-Z0-9\']/', '_', "There wouldn't be any"); $newstr = str_replace("'", '', $newstr);
Я поставил их на две отдельные строки, чтобы сделать код более понятным.
Примечание. Если вы ищете поддержку Unicode, см. Ниже ответ Филипа. Он будет соответствовать всем символам, которые регистрируются как буквы в дополнение к Az
.
Если вы, написав « не буквы и цифры », исключаете больше, чем [A-Za-z0-9]
(т. åäö
буквы типа åäö
) и хотите иметь возможность точно обрабатывать строки UTF-8 \p{L}
и \p{N}
.
\p{N}
будет соответствовать любому " Number " \p{L}
будет соответствовать любому символу буквы , который включает
Документация PHP: свойства символов в Юникоде
$data = "Thäre!wouldn't%bé#äny"; $new_data = str_replace ("'", "", $data); $new_data = preg_replace ('/[^\p{L}\p{N}]/u', '_', $new_data); var_dump ( $new_data );
вывод
string(23) "Thäre_wouldnt_bé_äny"
сделайте это в два этапа:
замените буквенные символы этим регулярным выражением:
[\/\&%#\$]
замените кавычки этим регулярным выражением:
[\"\']
и используйте preg_replace
:
$stringWithoutNonLetterCharacters = preg_replace("/[\/\&%#\$]/", "_", $yourString); $stringWithQuotesReplacedWithSpaces = preg_replace("/[\"\']/", " ", $stringWithoutNonLetterCharacters);