【发布时间】:2013-04-17 15:56:15
【问题描述】:
我正在尝试为任何给定的字符串创建一个正则表达式。
目标:删除所有不是“latin”或“小写希腊语”或“数字”的字符”。
到目前为止我做了什么:[^a-z0-9]
这非常适合拉丁字符。
当我尝试这个时:[^a-z0-9α-ω] 不走运。有效,但省略了任何其他符号,如 !!#$%@%#$@,`
我对正则表达式的了解有限。任何帮助将非常感激!
编辑:
下面发布的是匹配指定字符并从中创建一个 slug 的函数,用破折号作为分隔符:
$q_separator = preg_quote('-');
$trans = array(
'&.+?;' => '',
'[^a-z0-9 -]' => '',
'\s+' => $separator,
'('.$q_separator.')+' => $separator
);
$str = strip_tags($str);
foreach ($trans as $key => $val){
$str = preg_replace("#".$key."#i", $val, $str);
}
if ($lowercase === TRUE){
$str = strtolower($str);
}
return trim($str, '-');
如果字符串是:OnCE on a tIME !#% @$$ in MEXIco
使用该函数,输出将是:once-on-a-time-in-mexico
这很好用,但我希望 preg_match 也排除 greek 字符。
【问题讨论】:
-
每个操作系统的 preg_match 重复问题?
-
他有一个很好的解决方案..
标签: php regex preg-replace preg-match