我有一个像这样的字符串
05/15/2015 09:19 PM pt_Product2017.9.abc.swl.px64_kor_7700
我需要从中选择pt_Product2017.9.abc.swl.px64_kor
。 (以pt_
开头,以_kor
结束)
$str = "05/15/2015 09:19 PM pt_Product2017.9.abc.swl.px64_kor_7700";
preg_match('/^pt_*_kor$/',$str, $matches);
但它没有用。
答案 0 :(得分:4)
您需要删除锚点,在开头添加\b
以匹配前面带有非单词字符的pt_
,并使用带有\S
的{{1}}({ {1}}匹配任何字符但是空白的速记字符类:
*
请参阅regex demo
在正则表达式中,\S
和preg_match('/\bpt_\S*_kor/',$str, $matches);
强制正则表达式引擎在字符串末尾搜索^
,在字符串末尾搜索$
,pt
1}}匹配 0或更多下划线。请注意,正则表达式与通配符不同。
如果_kor
和_*
之间可以有空格,请使用pt_
:
_kor
我还应该提到贪婪:如果你有.*
,preg_match('/\bpt_.*_kor/',$str, $matches);
/ pt_something_kor_more_kor
将匹配整个字符串,但.*
/ \S*
会匹配只是.*?
。请根据您的要求进行调整。
答案 1 :(得分:1)
^
和$
是 完整 字符串的开头和结尾,而不仅仅是匹配的字符串。因此,只需使用(pt_.+_kor)
来匹配pt_
和_kor
之间的所有内容:preg_match('/(pt_+_kor)/',$str, $matches);
答案 2 :(得分:1)
您在正则表达式中使用的^
和$
表示该字符串 start pt
AND end kor
。但它既不是这样开始的,也不是kor
的结尾(事实上,以kor_7700
结尾)。
尝试删除^
和$
,您将获得匹配:
preg_match('/pt_.*_kor/',$str, $matches);