簡體   English   中英

正則表達式從行內容中提取文件名

[英]Regular expression extract filename from line content

我對正則表達式非常陌生。 我要提取以下字符串“ 109_Admin_RegistrationResponse_20130103.txt”

從此文件內容中,按行選擇內容:
13年1月10日10:44 AM 47 107_Admin_RegistrationDetail_20130111.txt
13年1月10日10:40 AM 11 107_Admin_RegistrationResponse_20130111.txt

正則表達式不應選擇第二行,只有第一行應返回true。

您的Regex有很多不同的錯誤...

  1. 您的行不是以所需的文件名開頭,而是在其中添加了^
  2. 您的字符組[a-zA-Z]缺少+ ,因此只能匹配單個字符
  3. 在字符組中不包含_ ,因此與Admin_RegistrationResponse不匹配
  4. 缺少\\d{2}僅匹配dd
  5. 根據M42的答案(我遺漏了),您還需要轉義點. 也可以,也可以匹配123_abc_12345678atxt (請注意txt之前的a

您的正則表達式應為

\\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$

移除錨點並逃脫點:

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

我是php的新手,但我認為您可以在php或您的語言中使用任何等效的explode()函數。

$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];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM