Java正则表达式*问题

时间:2018-01-26 20:45:30

标签: java regex

为什么这个正则表达式会触发索引“”?

Enter your regex: a*
Enter input string to search: aaaaa
I found the text "aaaaa" starting at index 0 and ending at index 5.
I found the text "" starting at index 5 and ending at index 5

2 个答案:

答案 0 :(得分:1)

从Java API文档(类Pattern, https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html):

X * - X,或更多次

因此空字符串匹配a出现零次。如果您需要至少出现一次a,请使用a+(这意味着a需要至少出现一次)。

答案 1 :(得分:0)

额外的空匹配,因为正则表达式引擎不仅会检查每个字符,还会检查字符之间的“空白空间”。

a+|^$ 匹配所有a时,最后仍有一个未检查的位置。它检查并说“哦,有0个,所以它应该匹配”,因此给你一个空的匹配。

第一场比赛:

enter image description here

第二场比赛:

enter image description here

我认为你真正的意思是这个正则表达式:

#!/usr/bin/env bash

ext=${1##*.}                              # ${1: -14} also possible
file=cust_${ext}_converted.txt

echo "$file"

它匹配一个或多个a或空字符串。