我正在使用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);
}
Run Code Online (Sandbox Code Playgroud)
在$text它看起来像这样:http://pastebin.com/9UQ5wNRu
问题是打印的匹配只有一个匹配:
Array
(
[0] => 3Bajus StanislavS2415079249-2615T01
)
Run Code Online (Sandbox Code Playgroud)
为什么这样对我?有什么想法可以解决问题吗?
也许你已经注意到文本中没有斯洛伐克语的常规字母字符(来自pastebin).如何匹配这些字符并选择具有以下格式的用户:
{number}{first_name}{space}{last_name}{id_number}
Run Code Online (Sandbox Code Playgroud)
怎么做?
好的第一个问题是固定的.谢谢@ chris85.我应该preg_match_all在整篇文章中使用并做到这一点.现在我得到了一个名字中包含非斯洛伐克(英语)字母的所有学生.
preg_match是一场比赛.您需要preg_match_all用于全局搜索.
[A-Z]不包括该范围之外的字符.因为您正在使用i字符类实际的修饰符,[A-Za-z]它可能是您想要的,也可能不是.您可以使用\p{L}任何语言代替字符.
演示: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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3145 次 |
| 最近记录: |