我正在努力创造slu ..我的字符串是这样的:$string='möbel#*-jérôme-mp3-how?';
步骤:1
首先,我想从此字符串中删除特殊字符,非字母数字和非拉丁字符。
像这样:$string='möbel-jérôme-mp3-how';
以前,我以前只在字符串中只有英文字符。
所以,我过去经常这样做:$string = preg_replace("([^a-z0-9])", "-", $string);
但是,由于我还想保留外国字符,因此无效。
步骤:2
然后,我想删除所有包含一个或多个数字的单词。
在这个示例字符串中,我想删除单词mp3,因为它包含一个或多个数字。
因此,最终字符串如下所示:$string='möbel-jérôme-how';
我曾经这样做过:
$words = explode('-',$string);
$result = array();
foreach($words as $word)
{
if( ($word ==preg_replace("([^a-z])", "-", $word)) && strlen($word)>2)
$result[]=$word;
}
$string = implode(' ',$result);
现在这不起作用,因为它包含外来字符。
答案 0 :(得分:2)
在PHP中,您可以访问Unicode属性:
$result = preg_replace('/[^\p{L}\p{N}-]+/u', '', $subject);
将为您执行第1步。 (\p{L}
匹配任何Unicode字母,\p{N}
匹配任何Unicode数字)。
删除带有数字的单词非常简单:
$result2 = preg_replace('/\b\w*\d\w*\b-?/', '', $result);
(\b
匹配单词的开头和结尾。)
答案 1 :(得分:2)
答案 2 :(得分:0)
我建议分多步执行此操作:
创建一个允许字符串(所有这些字符串)并通过仅保留字符串来完成字符串。 (这需要一些时间,但这是一次性的事情)
在-
上进行爆炸并浏览所有单词并仅保留不包含数字的单词。然后再次内爆。
我相信,你可以自己编写脚本。