我尝试提取下面字符串的“INV”部分:
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部分?
答案 0 :(得分:3)
因为.*
吞噬了一切,包括_。试试这个:
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" : "";'
答案 1 :(得分:0)
改变。?通过[^ _]
php -r 'echo preg_match("/_([^_]*)_UID-.*?\.PDF$/", "123_456_P1234_INV_UID-123456.PDF", $cat) ? $cat[1]."\n" : "";'
答案 2 :(得分:0)
从()使用你只想要 INV 中的任何内容正确吗? 如果您确定在此之后总是有UID,请注意:INV不能包含_。
php -r 'echo preg_match("/_(.[^_]*?)_UID-.*?\.PDF$/", "123_456_P1234_INV_UID-123456.PDF", $cat) ? $cat[1]."\n" : "";'