PHP从字符串中提取包含特殊字符的单词
我有一个字符串:PHP从字符串中提取包含特殊字符的单词,php,regex,Php,Regex,我有一个字符串: $str = " Côte-d'azure ! (3000) limousin - limousine "; 我需要提取一些单词并将它们放入数组中。要最终获得: array ( 0 => "Côte-d'azure", 1 => "limousin", 2 => "limousine" ); 所以我试着: preg_match_all("/[a-zA-Z]+/", $str, $all); 但这
$str = " Côte-d'azure ! (3000) limousin - limousine ";
我需要提取一些单词并将它们放入数组中。要最终获得:
array (
0 => "Côte-d'azure",
1 => "limousin",
2 => "limousine"
);
所以我试着:
preg_match_all("/[a-zA-Z]+/", $str, $all);
但这忽略了特殊字符ô、“和-
有什么建议吗 试试看
if (preg_match('/[^a-zA-Z0-9]+/', $your_string, $matches))
{
echo ' symbol encountered !!';
}
使用Unicode模式
u
和:
这需要一个(Unicode)字母,然后匹配尽可能多的其他Unicode字母、反斜杠、连字符和撇号。如果希望其他标点符号不分隔单词,请将其包含在字符类中
注意5个反斜杠。编译字符串时会删除三个反斜杠,因为其中两个反斜杠转义后面的反斜杠,最后一个反斜杠转义
“
。因此正则表达式引擎只接收2个反斜杠。正则表达式引擎将其解释为一个文字反斜杠。不幸的是,在使用PHP时,无法使用少于4个反斜杠来表示一个文字反斜杠。只是一个快速猜测:试试[character属性](www.PHP.net/manual/en/regexp.reference.unicode.PHP):/\p{L}[\p{L}-]+/u
(字符类在后面的单词中允许连字符)谢谢m.buettner,但它仍然忽略了单引号,我忽略了这一点。这就是角色类的用途。让我来回答一下,我仍然有单报价的问题。非常感谢。buettner@SamiElHilali它对我非常有效。你能展示一下你是如何使用正则表达式的吗?preg_match_all(“/\b[\p{L}-]+[a-z]+\b/u”,$str,$all);其中$str=mysql\u real\u escape\u string($str);嗯,这很重要。在“
前面加一个反斜杠。这可能应该包含在character类中。此外,您的正则表达式还有一些其他问题。我将编辑我的,以适应反斜杠,然后你应该使用我的版本,我想。
preg_match_all('/\p{L}[\p{L}\\\\\'-]+/u', mysql_real_escape_string($str), $all);