Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式以给定字符串开始和结束_Php_Regex - Fatal编程技术网

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。