我正在尝试对包含我要提取的多个短语的数据执行preg_match_all。
数据:
'us/Llane/Hówl' then some other text then 'us/Casey/Hówl' and so on
我想把Llane和Casey这两个名字提取成一个数组。我目前正在使用http://www.phpliveregex.com/以及我的代码本身尝试解决这个问题,但即使使用互联网上的一些优秀指南,正则表达式似乎也很难理解。据我所知,这应该有效:
preg_match_all("/us\/(.*?)\/HÓWL'/",$data,$output);
但我得到的是$ output [0]和$ output [1],它们都是空白的。我以前没有遇到过问题所以它可能是特殊字符但是我只能找到关于preg_match_all的信息来检测特殊字符,而不仅仅是在字符串中使用它们。任何帮助都会很棒,我现在已经坚持这个问题大约4天了,花了很多时间试图解决这个问题。
答案 0 :(得分:2)
您尝试匹配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
将始终位于正斜杠的右侧,否则我会考虑使用完整的 Letter Unicode property \p{L}
。这样您也可以匹配重音字符。
preg_match_all("~us/(.*?)/\p{L}+~u", $data, $output);
答案 1 :(得分:1)
案例不敏感可能无法正常工作
使用此:
$regex = '~us/\K.*?(?=/Hówl)~';
$count = preg_match_all($regex, $yourstring, $matches);
if($count) print_r($matches[0]);
比赛:
Llane
Casey
查看the demo中的匹配项。
<强>解释强>
us/
匹配文字字符\K
告诉引擎放弃与其返回的最终匹配项目匹配的内容.*?
懒洋洋地匹配...... (?=/Hówl)
可以断言后面的内容是Hówl