[英]Regex matches in Ruby, but not in Java?
為了獲得更多關於正則表達式的經驗(同時也使工作變得更輕松),我試圖解析Java中的某些文件名。
我的字符串是這樣的: /home/user/example/Results/ExampleFilePrefix_20140324-0500_OptionalTextThatMightContainNumbers123.csv
基本上,文件名總是以ExampleFilePrefix_
開頭,后跟時間戳,有時取決於文件的生成方式,有時以OptionalTextThatMightContainNumbers123
結尾。 我想要的相關信息是時間戳,后跟可選文本(如果存在)。
我在弄亂各種正則表達式,雖然我可以讓它們全部與Ruby regex解析器一起工作,但我卻無法讓它們在Java中工作。 我沒有跟蹤它們,但這是我最近的嘗試:
_(\\w+-\\w+)
可以在Ruby中正常運行: http : //rubular.com/r/K2BiboURRo ,但在Java中甚至無法與之匹配: http : //fiddle.re/c7m04
由於在線解析器不匹配,我認為我編寫的代碼不是問題,但是請確保將其粘貼在此處。
private String extractFileName(String filename) {
String resultNameBase = "RegexDidntMatch";
Pattern pattern = Pattern.compile("_(\\w+-\\w+)", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(filename);
if (matcher.matches() && matcher.find()) {
resultNameBase = matcher.group(1);
}
return resultNameBase;
}
一如既往,感謝所有人
這部分是問題:
if (matcher.matches() && matcher.find())
Matcher#matches()
將完整的輸入字符串與您的正則表達式匹配。
替換為:
if (matcher.find())
首先是其matcher.find()
並捕獲組0
而不是1
。
if (matcher.find()) {
resultNameBase = matcher.group();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.