如何从字符串中替换字符?有时YouTube视频标题包含这样的字符。我不想替换像!@#$%^& *()这样的字符。
我目前正在使用preg_replace('/[^A-Za-z0-9\-]/', '', $VideoTitle);
样本数组:
$VideoTitles[]='Sia 2017 Cheap Thrills 2017 live ';
$VideoTitles[]='TAYLOR SWIFT - SHAKE IT OFF #1989';
预期产出:
Sia 2017 Cheap Thrills 2017 live
TAYLOR SWIFT - SHAKE IT OFF #1989
答案 0 :(得分:1)
带示例输入的代码:Demo
$VideoTitles=[
'Kilian à Dijon #4 • Vlog #2 • Primark again !? - YouTube',
'Funfesty on Twitter: "Je commence à avoir mal à la tête à force',
'Sia 2017 Cheap Thrills 2017 live '
];
$VideoTitles=preg_replace('/[^ -\x{2122}]\s+|\s*[^ -\x{2122}]/u','',$VideoTitles); // remove out of range characters and whitespace character on one side only
var_export($VideoTitles);
输出:
array (
0 => 'Kilian à Dijon #4 • Vlog #2 • Primark again !? - YouTube',
1 => 'Funfesty on Twitter: "Je commence à avoir mal à la tête à force',
2 => 'Sia 2017 Cheap Thrills 2017 live',
)
上述正则表达式模式使用的字符范围为\x20-\x2122
( space 到 trade-mark-sign )。我选择了这个范围是因为它应该覆盖绝大多数与单词相关的字符,包括带重音和非英文字符的字母。 (不可否认,它还包含许多与单词无关的字符。您可能希望使用两个单独的范围以获得更高的特异性,例如:/[^\x{20}-\x{60}\x{7B}-\x{FF}]/ui
- 这种不区分大小写搜索两个范围: space 严重重音和左大括号到带分音符的拉丁小写字母)
如果您发现此范围不必要地慷慨或需要花费太长时间来处理,您可以自行决定适当的字符范围。
例如,你可能喜欢更轻但更不慷慨的/[^\x20-\x7E]/u
(从空间到代替)。但是,如果您将其应用于我的上述法语$VideoTitles
之一,那么您将通过删除合法字母来破坏文本。
这是一个menu of characters and their unicode numbers,可以帮助您了解上述范围内的内容。
*请记住在结算分隔符后包含一个unicode标志u
。
为了完整起见,我应该说删除两个表情符号的字面/窄解决方案是:
$VideoTitle=preg_replace('/[\x{1F3A7}\x{1F3AC}]/u','',$VideoTitle); // omit 2 emojis
这些表情符号被称为"拍板(U + 1F3AC)"和#34;耳机(U + 1F3A7)"。
答案 1 :(得分:0)
function removeEmoticon($text) {
$cleanText = "";
// Match Emoticons
$regexEmoticons = '/[\x{1F600}-\x{1F64F}]/u';
$cleanText = preg_replace($regexEmoticons, '', $text);
// Match Miscellaneous Symbols and Pictographs
$regexSymbols = '/[\x{1F300}-\x{1F5FF}]/u';
$cleanText = preg_replace($regexSymbols, '', $cleanText);
// Match Transport And Map Symbols
$regexTransport = '/[\x{1F680}-\x{1F6FF}]/u';
$cleanText = preg_replace($regexTransport, '', $cleanText);
// Match Miscellaneous Symbols
$regexMisc = '/[\x{2600}-\x{26FF}]/u';
$cleanText = preg_replace($regexMisc, '', $cleanText);
// Match Dingbats
$regexDingbats = '/[\x{2700}-\x{27BF}]/u';
$cleanText = preg_replace($regexDingbats, '', $cleanText);
return $cleanText;
}