- 第一个问题是这样的:
我在用http://www.phpliveregex.com/检查我的正则表达式是否正确,它找到多个匹配行。
我正在做这个正则表达式:
$lines = explode('\n', $text);
foreach($lines as $line) {
$matches = [];
preg_match("/[0-9]+[A-Z][a-z]+ [A-Z][a-z]+S[0-9]+\-[0-9]+T[0-9]+/uim", $line, $matches);
print_r($matches);
}
on the $text
看起来像这样:http://pastebin.com/9UQ5wNRu
问题是打印的匹配项只有一个匹配项:
Array
(
[0] => 3Bajus StanislavS2415079249-2615T01
)
为什么要这样对我?有什么想法可以解决这个问题吗?
- 第二个问题
也许您已经注意到文本中斯洛伐克语的常规字母字符(来自pastebin)。如何匹配这些字符并选择具有此格式的用户:
{number}{first_name}{space}{last_name}{id_number}
怎么做?
好的,第一个问题已解决。谢谢你@chris85。我应该用过preg_match_all
并对整个文本进行操作。现在我得到了名字中含有非斯洛伐克(英语)字母的所有学生的数组。
preg_match
是一场比赛。你需要使用preg_match_all
用于全局搜索。
[A-Z]
不包含该范围之外的字符。由于您正在使用i
字符类实际的修饰符[A-Za-z]
这可能是也可能不是您想要的。您可以使用\p{L}
代替任何语言的字符。
Demo: https://regex101.com/r/L5g3C9/1
所以你的 PHP 代码就是:
preg_match_all("/^[0-9]+\p{L}+ \p{L}+S[0-9]+\-[0-9]+T[0-9]+$/uim", $text, $matches);
print_r($matches);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)