Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用正则表达式匹配文本中的模式_Php_Regex_Preg Match_Preg Match All - Fatal编程技术网

Php 使用正则表达式匹配文本中的模式

Php 使用正则表达式匹配文本中的模式,php,regex,preg-match,preg-match-all,Php,Regex,Preg Match,Preg Match All,使用正则表达式匹配模式的最后一个匹配项 关于以下案文: commit 5a254a0bfc0232bd838157cada953f87a7b6ffad Merge: 2b9fcd8 a9b214e Author: Peter Pan <peterpan@gmail.com> Date: Wed Dec 7 11:54:08 2016 -0500 Merge branch 'master' of github.com:peterpan/testing commit 2b

使用正则表达式匹配模式的最后一个匹配项

关于以下案文:

commit 5a254a0bfc0232bd838157cada953f87a7b6ffad
Merge: 2b9fcd8 a9b214e
Author: Peter Pan <peterpan@gmail.com>
Date:   Wed Dec 7 11:54:08 2016 -0500

    Merge branch 'master' of github.com:peterpan/testing

commit 2b9fcd8c10ee18ad2ea88190a3b10cc8affd4093
Author: Peter Pan <peterpan@gmail.com>
Date:   Wed Dec 7 11:53:51 2016 -0500

    KWP245

commit a9b214eb476e3d1f3896db31125d6e8108dca06d
Author: Peter Pan <peterpan@gmail.com>
Date:   Wed Dec 7 10:52:40 2016 -0600

    QZN0O5

commit a6be0abd17d3d6b1fdfe0711fe8e41a28b092212
Author: Peter Pan <peterpan@gmail.com>
Date:   Wed Dec 7 10:52:38 2016 -0600

    QZN0O5
但是没有成功

实际上,我想捕获提交代码:
a9b214eb476e3d1f3896db31125d6e8108dca06d
更具体一些。如果你有一个解决方案,那就更好了


您知道如何匹配该文本吗?

您可以将以下正则表达式与
preg\u match\u all
一起使用,并获取最后一项:

/^\s*QZN0O5\s*(.*\R.*\R.*+)(?!(?s:.*^\s*QZN0O5))/m
或者——或者:

/^\h*QZN0O5\s*(.*+(?:\R(?!\R).*)*+)(?![\s\S]*?^\h*QZN0O5$)/m
请参阅和

详细信息

  • ^
    -行开始
  • \s*
    -0个或更多空格
  • QZN0O5
    -您需要查找的代码
  • \s*
    -0+空格
  • (.*\R.*\R.+
    -3行
  • (?!(?s:.*^\s*QZN0O5))
    -但后面不跟任何0+字符(内联修饰符组
    (?s:..)
    也会使
    匹配换行符),后跟一个行首、0+空格和需要匹配的代码)
  • $
    -行末
第二个正则表达式类似,但是
(.*+(?:\R(?!\R.*)*+)
部分只是使正则表达式匹配,直到出现双线中断

见:

$re='/^\h*QZN0O5\s*(*+(?:\R(?!\R.*)*)*+(?![\s\s]*?^\h*QZN0O5$)/m';
$str="提交5a254a0bfc0232bd838157cada953f87a7b6ffad\r\n合并:2b9fcd8 a9b214e\r\n提交人:彼得·潘\r\n日期:2016年12月7日星期三11:54:08-0500\r\n\r\n合并github.com的分支“master”:彼得潘/测试\r\n\r\n\r\n提交人2b9fcd8c10ee18ad2ea88190a3b10cc8affd4093\r\n日期:彼得·潘\r\n日期:2016年12月7日11:53:51-0500\r\r\nKWP245\r\n\r\n提交文件A9B214EB476E3D1F3896DB311256E8108DCA06D\r\n作者:彼得·潘\r\n日期:2016年12月7日星期三10:52:40-0600\r\n\r\n QZN0O5\r\n\r\n提交文件A6BE10ADD1D6B1FDFE0711FE8E41A28B092212\r\n作者:彼得·潘\r\n日期:2016年12月7日星期三10:52:38-0600\r\r\n\r\r\n QZN0O5\r\n\r\r\n QZN0O5\r\r\n\n0D6B1D6B1D6B1FD027FEB1212\r\r\nPeter Pan\r\n日期:2016年12月7日星期三10:52:38-0600\r\n\r\n H82LKJ\r\n\r\n提交aa72dfeb476e3d1f3896db31125d6e8108dca06d\r\n作者:Peter Pan\r\n日期:2016年12月7日星期三10:52:40-0600”;
预匹配全部($re,$str,$MATCHS);
回显结束($matches[1]);

匹配所有匹配项并获取数组中的最后一项。我只获得一个大匹配项,而不是多个小匹配项。我尝试了其他示例文本,但没有成功。我将其他文本发布在前一个文本的下方。
preg_match("/(?<!commit).*?QZN0O5/is", $text, $matches);
/^\s*QZN0O5\s*(.*\R.*\R.*+)(?!(?s:.*^\s*QZN0O5))/m
/^\h*QZN0O5\s*(.*+(?:\R(?!\R).*)*+)(?![\s\S]*?^\h*QZN0O5$)/m
$re = '/^\h*QZN0O5\s*(.*+(?:\R(?!\R).*)*+)(?![\s\S]*?^\h*QZN0O5$)/m';
$str = "commit 5a254a0bfc0232bd838157cada953f87a7b6ffad\r\nMerge: 2b9fcd8 a9b214e\r\nAuthor: Peter Pan <peterpan@gmail.com>\r\nDate:   Wed Dec 7 11:54:08 2016 -0500\r\n\r\n    Merge branch 'master' of github.com:peterpan/testing\r\n\r\ncommit 2b9fcd8c10ee18ad2ea88190a3b10cc8affd4093\r\nAuthor: Peter Pan <peterpan@gmail.com>\r\nDate:   Wed Dec 7 11:53:51 2016 -0500\r\n\r\n    KWP245\r\n\r\ncommit a9b214eb476e3d1f3896db31125d6e8108dca06d\r\nAuthor: Peter Pan <peterpan@gmail.com>\r\nDate:   Wed Dec 7 10:52:40 2016 -0600\r\n\r\n    QZN0O5\r\n\r\ncommit a6be0abd17d3d6b1fdfe0711fe8e41a28b092212\r\nAuthor: Peter Pan <peterpan@gmail.com>\r\nDate:   Wed Dec 7 10:52:38 2016 -0600\r\n\r\n    QZN0O5\r\n\r\ncommit bb2762bd17d3d6b1fdfe0711fe8e41a28b092212\r\nAuthor: Peter Pan <peterpan@gmail.com>\r\nDate:   Wed Dec 7 10:52:38 2016 -0600\r\n\r\n    H82LKJ\r\n\r\ncommit aa72dfeb476e3d1f3896db31125d6e8108dca06d\r\nAuthor: Peter Pan <peterpan@gmail.com>\r\nDate:   Wed Dec 7 10:52:40 2016 -0600";
preg_match_all($re, $str, $matches);
echo end($matches[1]);