PHP正则表达式以给定字符串开头和结尾

时间:2015-09-16 08:39:02

标签: php regex

我有一个像这样的字符串 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);

但它没有用。

3 个答案:

答案 0 :(得分:4)

您需要删除锚点,在开头添加\b以匹配前面带有非单词字符的pt_,并使用带有\S的{​​{1}}({ {1}}匹配任何字符但是空白的速记字符类:

*

请参阅regex demo

在正则表达式中,\Spreg_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);

以下是演示:https://regex101.com/r/qL4fW9/1

答案 2 :(得分:1)

您在正则表达式中使用的^$表示该字符串 start pt AND end kor。但它既不是这样开始的,也不是kor的结尾(事实上,以kor_7700结尾)。

尝试删除^$,您将获得匹配:

preg_match('/pt_.*_kor/',$str, $matches);