PHP:需要使用的preg_match提取字符串的某些部分()
问题描述:
我尝试提取下面的字符串“INV”部分:PHP:需要使用的preg_match提取字符串的某些部分()
123_456_P1234_INV_UID-123456.PDF
下面的代码我到目前为止:
php -r 'echo preg_match("/_(.*?)_UID-.*?\.PDF$/", "123_456_P1234_INV_UID-123456.PDF", $cat) ? $cat[1]."\n" : "";'
这将返回:
_456_P1234_INV
谁能告诉我为什么它包括INV位之前的一切吗?我怎样才能取得INV部分?
答
因为.*
吞下一切,包括_。试试这个:
php -r 'echo preg_match("/([^_]*?)_UID-.*?\.PDF$/", "123_456_P1234_INV_UID-123456.PDF", $cat) ? $cat[1]."\n" : "";'
更新,读答案的评论对另一个答案后:
php -r 'echo preg_match("/([^_]*_UID-.*)\.PDF$/", "123_456_P1234_INV_UID-123456.PDF", $cat) ? $cat[1]."\n" : "";'
答
变化。 ?通过[^ _]
php -r 'echo preg_match("/_([^_]*)_UID-.*?\.PDF$/", "123_456_P1234_INV_UID-123456.PDF", $cat) ? $cat[1]."\n" : "";'
+0
工作,谢谢! – Reado 2010-07-30 14:55:01
答
从()的使用,你只是想无论是在INV是否正确? 如果你确定在这个工作之后总会有一个UID,注意:INV不能包含_。
php -r 'echo preg_match("/_(.[^_]*?)_UID-.*?\.PDF$/", "123_456_P1234_INV_UID-123456.PDF", $cat) ? $cat[1]."\n" : "";'
是的,虽然它可能不总是“INV”,这就是为什么我使用这种方法。那有意义吗? – Reado 2010-07-30 14:51:20