PHP正则表达式以给定字符串开始和结束
我有一根这样的绳子PHP正则表达式以给定字符串开始和结束,php,regex,Php,Regex,我有一根这样的绳子 2015年5月15日09:19 PM pt_Product2017.9.abc.swl.px64_kor_7700我需要从中选择pt_Product2017.9.abc.swl.px64_kor。(以pt\u开始,以\u kor结束) 但它不起作用。您需要删除锚定,在开始处添加一个\b,以匹配前面带有非单词字符的pt\u,并将\S与*一起使用(\S速记字符类,该类匹配除空格外的任何字符): 看 在正则表达式中,^和$强制正则表达式引擎搜索字符串开头的pt,以及字符串结尾的\u
2015年5月15日09:19 PM pt_Product2017.9.abc.swl.px64_kor_7700
我需要从中选择pt_Product2017.9.abc.swl.px64_kor
。(以pt\u
开始,以\u kor
结束)
但它不起作用。您需要删除锚定,在开始处添加一个
\b
,以匹配前面带有非单词字符的pt\u
,并将\S
与*
一起使用(\S
速记字符类,该类匹配除空格外的任何字符):
看
在正则表达式中,^
和$
强制正则表达式引擎搜索字符串开头的pt
,以及字符串结尾的\u kor
,并且.*
匹配0个或更多下划线。请注意,正则表达式模式与通配符不同
如果pt\u
和\u kor
之间可能有空格,请使用*
:
preg_match('/\bpt_.*_kor/',$str, $matches);
我还应该提到贪婪:如果你有
pt\u something\u kor\u more\u kor
,那么*
/\S*
将匹配整个字符串,但是*?
//\S*?
将只匹配pt\u kor
。请根据您的要求进行调整。您需要移除锚定,在开始处添加一个\b
,以匹配前面带有非单词字符的pt\u
,并将\S
与*
一起使用(\S
速记字符类,可匹配除空格以外的任何字符):
看
在正则表达式中,^
和$
强制正则表达式引擎搜索字符串开头的pt
,以及字符串结尾的\u kor
,并且.*
匹配0个或更多下划线。请注意,正则表达式模式与通配符不同
如果pt\u
和\u kor
之间可能有空格,请使用*
:
preg_match('/\bpt_.*_kor/',$str, $matches);
我还应该提到贪婪:如果你有pt\u something\u kor\u more\u kor
,那么*
/\S*
将匹配整个字符串,但是*?
//\S*?
将只匹配pt\u kor
。请根据您的要求进行调整。^
和$
是完整的字符串的开始和结束,而不仅仅是匹配的字符串。因此,只需使用(pt.+\u kor)
来匹配pt.
和\u kor
之间的所有内容:preg\u match('/(pt.+\u kor)/',$str,$matches)代码>
这里有一个演示:^
和$
是完整的字符串的开始和结束,而不仅仅是匹配的字符串。因此,只需使用(pt.+\u kor)
来匹配pt.
和\u kor
之间的所有内容:preg\u match('/(pt.+\u kor)/',$str,$matches)代码>
这里有一个演示:正则表达式中使用的^
和$
意味着字符串应该以pt
开头,以kor
结尾。但它既不是以这样的方式开始,也不是以kor
结束(事实上,以kor\u 7700
结束)
尝试删除^
和$
,您将获得匹配项:
preg_match('/pt_.*_kor/',$str, $matches);
正则表达式中使用的^
和$
表示字符串应以pt
开头,以kor
结尾。但它既不是以这样的方式开始,也不是以kor
结束(事实上,以kor\u 7700
结束)
尝试删除^
和$
,您将获得匹配项:
preg_match('/pt_.*_kor/',$str, $matches);
+1我很高兴你修改了这个答案来解释为什么正则表达式是错误的,因为它将对更多的人更有用,包括OP+1我很高兴你修改了这个答案来解释正则表达式是错误的,因为它将对更多的人更有用,包括OP。