Php preg_匹配所有特殊字符

Php preg_匹配所有特殊字符,php,regex,special-characters,preg-match-all,Php,Regex,Special Characters,Preg Match All,我正在尝试对包含我要提取的多个短语的数据进行预匹配 数据: 我想将两个名字Llane和Casey提取到一个数组中。我目前正在使用我的代码以及我的代码本身来尝试解决这个问题,但即使有一些互联网上的优秀指南,regex似乎也很难理解。据我所知,这应该是可行的: preg_match_all("/us\/(.*?)\/HÓWL'/",$data,$output); 但我得到的只是$output[0]和$output[1],它们都是空白的。我以前没有遇到过问题,所以可能是特殊字符,但是我只能找到pre

我正在尝试对包含我要提取的多个短语的数据进行预匹配

数据:

我想将两个名字Llane和Casey提取到一个数组中。我目前正在使用我的代码以及我的代码本身来尝试解决这个问题,但即使有一些互联网上的优秀指南,regex似乎也很难理解。据我所知,这应该是可行的:

preg_match_all("/us\/(.*?)\/HÓWL'/",$data,$output);

但我得到的只是$output[0]和$output[1],它们都是空白的。我以前没有遇到过问题,所以可能是特殊字符,但是我只能找到preg_match_的信息来检测特殊字符,而不仅仅是在字符串中使用它们。任何帮助都会很好,我已经在这个问题上坚持了大约4天,并且花了大量的时间试图解决它。

案例不敏感可能没有正常工作。

使用以下命令:

$regex = '~us/\K.*?(?=/Hówl)~';
$count = preg_match_all($regex, $yourstring, $matches);
if($count) print_r($matches[0]);
比赛:

Llane
Casey
在中查看比赛

解释

  • us/
    匹配文字字符
  • \K
    告诉引擎放弃与其返回的最终匹配项相距甚远的匹配项
  • *?
    延迟匹配最多
  • 向前看
    (?=/Hówl)
    可以断言接下来是
    Hówl

不区分大小写可能无法正常工作

使用以下命令:

$regex = '~us/\K.*?(?=/Hówl)~';
$count = preg_match_all($regex, $yourstring, $matches);
if($count) print_r($matches[0]);
比赛:

Llane
Casey
在中查看比赛

解释

  • us/
    匹配文字字符
  • \K
    告诉引擎放弃与其返回的最终匹配项相距甚远的匹配项
  • *?
    延迟匹配最多
  • 向前看
    (?=/Hówl)
    可以断言接下来是
    Hówl

不区分大小写可能无法正常工作

使用以下命令:

$regex = '~us/\K.*?(?=/Hówl)~';
$count = preg_match_all($regex, $yourstring, $matches);
if($count) print_r($matches[0]);
比赛:

Llane
Casey
在中查看比赛

解释

  • us/
    匹配文字字符
  • \K
    告诉引擎放弃与其返回的最终匹配项相距甚远的匹配项
  • *?
    延迟匹配最多
  • 向前看
    (?=/Hówl)
    可以断言接下来是
    Hówl

不区分大小写可能无法正常工作

使用以下命令:

$regex = '~us/\K.*?(?=/Hówl)~';
$count = preg_match_all($regex, $yourstring, $matches);
if($count) print_r($matches[0]);
比赛:

Llane
Casey
在中查看比赛

解释

  • us/
    匹配文字字符
  • \K
    告诉引擎放弃与其返回的最终匹配项相距甚远的匹配项
  • *?
    延迟匹配最多
  • 向前看
    (?=/Hówl)
    可以断言接下来是
    Hówl

您试图匹配的是
HÓWL
,而不是
HóWL

$data = "'us/Llane/Hówl' then some other text then 'us/Casey/Hówl' and so on";
preg_match_all("~us/(.*?)/Hówl~", $data, $output);
print_r($output[1]);
输出

Array
(
    [0] => Llane
    [1] => Casey
)

另一方面,除非你知道<代码> H.WL 总是在前斜杠的右边,我会考虑使用完整的字母<代码> \p{L}。这也将允许您匹配重音字符

preg_match_all("~us/(.*?)/\p{L}+~u", $data, $output);

您试图匹配的是
HÓWL
,而不是
HóWL

$data = "'us/Llane/Hówl' then some other text then 'us/Casey/Hówl' and so on";
preg_match_all("~us/(.*?)/Hówl~", $data, $output);
print_r($output[1]);
输出

Array
(
    [0] => Llane
    [1] => Casey
)

另一方面,除非你知道<代码> H.WL 总是在前斜杠的右边,我会考虑使用完整的字母<代码> \p{L}。这也将允许您匹配重音字符

preg_match_all("~us/(.*?)/\p{L}+~u", $data, $output);

您试图匹配的是
HÓWL
,而不是
HóWL

$data = "'us/Llane/Hówl' then some other text then 'us/Casey/Hówl' and so on";
preg_match_all("~us/(.*?)/Hówl~", $data, $output);
print_r($output[1]);
输出

Array
(
    [0] => Llane
    [1] => Casey
)

另一方面,除非你知道<代码> H.WL 总是在前斜杠的右边,我会考虑使用完整的字母<代码> \p{L}。这也将允许您匹配重音字符

preg_match_all("~us/(.*?)/\p{L}+~u", $data, $output);

您试图匹配的是
HÓWL
,而不是
HóWL

$data = "'us/Llane/Hówl' then some other text then 'us/Casey/Hówl' and so on";
preg_match_all("~us/(.*?)/Hówl~", $data, $output);
print_r($output[1]);
输出

Array
(
    [0] => Llane
    [1] => Casey
)

另一方面,除非你知道<代码> H.WL 总是在前斜杠的右边,我会考虑使用完整的字母<代码> \p{L}。这也将允许您匹配重音字符

preg_match_all("~us/(.*?)/\p{L}+~u", $data, $output);

仅供参考,添加了演示和解释,如果您有问题,请告诉我。:)仅供参考,添加了演示和解释,如果您有问题,请告诉我。:)仅供参考,添加了演示和解释,如果您有问题,请告诉我。:)仅供参考,添加了演示和解释,如果您有问题,请告诉我。:)