0

我对正则表达式很陌生。我想提取以下字符串“109_Admin_RegistrationResponse_20130103.txt”

从此文件内容中,每行选择内容:
01-10-13 10:44AM 47 107_Admin_RegistrationDetail_20130111.txt
01-10-13 10:40AM 11 107_Admin_RegistrationResponse_20130111.txt

正则表达式不应该选择第二行,只有第一行应该返回 true。

4

3 回答 3

3

你的正则表达式有很多不同的错误......

  1. 您的行没有以您所需的文件名开头,但您放在^那里
  2. +在您的字符组中丢失[a-zA-Z],因此只能匹配单个字符
  3. 不包含_在您的角色组中,因此不匹配Admin_RegistrationResponse
  4. 丢失\并且d{2}只会匹配dd
  5. 根据 M42 的回答(我忽略了),您还需要转义点.,否则它也会匹配123_abc_12345678atxt(注意a之前的txt

你的正则表达式应该是

\d+_[a-zA-Z_]+_\d{4}\d{2}\d{2}\.txt$

可以简化为

\d+_[a-zA-Z_]+_\d{8}\.txt$

看起来\d{2}\d{2}真的是多余的——除非你想捕获组,否则你会这样做:

\d+_[a-zA-Z_]+_(\d{4})(\d{2})(\d{2})\.txt$

于 2013-01-09T12:21:58.983 回答
1

Remove the anchors and escape the dot:

\d+[a-zA-Z_]+\d{8}\.txt
于 2013-01-09T12:24:50.573 回答
0

我是 php 的新手,但我认为您可以使用explode()php 中的函数或您的语言中的任何等效函数。

$string = "01-09-13 10:17AM 11 109_Admin_RegistrationResponse_20130103.txt";
$pieces = explode("_", $string);

$stringout = "";
foreach($i = 0;$i<count($pieces);i++){
 $stringout = $stringout.$pieces[$i];
}
于 2013-01-09T12:27:05.390 回答