Php 帮我处理我的regexp

Php 帮我处理我的regexp,php,regex,Php,Regex,我正在尝试匹配如下所示的文件名: 45.pdf 或 因此有一个正整数,一个可选的下划线,后跟另一个正整数,一个句号和一个字符串来重新表示扩展名 问题是,我的regexp也匹配了45_uwk.pdf,我不想这样 这是: $aRegexp = '/[0-9]+_?[0-9]*\\.[a-z]+/'; //$aString = '55.pdf'; //$aString = '55_5.pdf'; $aString = '55_.pdf'; var_dump(preg_match($aRegexp

我正在尝试匹配如下所示的文件名:

45.pdf

因此有一个正整数,一个可选的下划线,后跟另一个正整数,一个句号和一个字符串来重新表示扩展名

问题是,我的regexp也匹配了45_uwk.pdf,我不想这样

这是:

$aRegexp = '/[0-9]+_?[0-9]*\\.[a-z]+/';

//$aString = '55.pdf';
//$aString = '55_5.pdf';
$aString = '55_.pdf';

var_dump(preg_match($aRegexp, $aString)); // should return int(0)

将下划线和第二个整数组合在一起,对第二个整数使用
+
而不是
*
强制匹配,并可选择使用
匹配整个组,如下所示:

$aRegexp = '/[0-9]+(_[0-9]+)?\\.[a-z]+/';

(可选)将其设置为非捕获组
(?:[0-9]+)?
。我试图使用该正则表达式进行解析,但未能解析“55_5.pdf”?代码:@Hoáng Long:regex有效,codepad的PHP构建被破坏。您看到的警告表明正则表达式引擎的PHP版本中存在问题,而不是正则表达式。@Close voter:您最好在处理其他非常规问题时关闭所有非常规问题,因为这些问题过于本地化。
$aRegexp = '/[0-9]+(_[0-9]+)?\\.[a-z]+/';