php - PHP preg_match_all - 这个正则表达式有什么问题?
问题描述
假设我在文本文件中有以下内容:
xxa name="round_xx
Number 1
xxcolspanxx
DOG
yya name="round_yy
Number 2
xxcolspanxx
DOG
zza name="round_zz
Number 3
xxcolspanxx
DOG
我想使用 PHP 的preg_match_all()函数返回文本文件中以以下开头的所有序列:
一个名字="round_
.. 之间有任何字符序列和换行符,然后以:
科尔斯潘
所以结果应该是这 3 个匹配项:
a name="round_xx
Number 1
xxcolspan
a name="round_yy
Number 2
xxcolspan
a name="round_zz
Number 3
xxcolspan
这是我的代码,失败了。它将文本文件的内容读入 $page_contents,但 preg_match_all 产生的匹配完全不正确:
$page_contents = file_get_contents('./path/to/textfile.txt');
$matches1 = array();
preg_match_all('/a name="round_(.*)colspan/s', $page_contents, $matches1);
我正在使用 PHP 7.1.28,Windows 10。谢谢。
解决方案
使正则表达式不贪心:
preg_match_all('/a name="round_(.*?)colspan/s', $page_contents, $matches1);
// __^
推荐阅读
- python - 通过 pywinauto 调整记事本大小
- c - C 编程中变量过多导致的错误
- ios - Core Image GPU 性能太慢
- oracle - 改进以下 oracle 查询以更有效
- rxjs - 在 Angular 6 中使用油门
- c - 为什么打开成功创建的名称管道时程序会卡住?
- google-app-engine - 在 NameSilo 上使用域为 GAE java 应用程序设置 https 默认值
- python - pandas 数据框中的元素编号
- angular - 从 API 检索后在 html 中显示时出现嵌套循环错误
- php - PHP ~ 检查一个日期是否出现在下一个(正确的)周内