Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP从字符串中提取包含特殊字符的单词_Php_Regex - Fatal编程技术网

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);