【发布时间】:2016-12-01 13:15:23
【问题描述】:
我正在研究模式为的正则表达式:
1.0.0[ - optional description]/1.0.0.0[ - optional description].txt
[ - optional description] 部分当然是可选的。所以一些可能的 VALID 值是
1.0.0/1.0.0.0.txt
1.0.0/1.0.0.0 - xyz.txt
1.0.0 - abc/1.0.0.0 - xyz.txt
1.0.0 - abc/1.0.0.0.txt
为了在模式匹配中更加健壮,我想在“-”字符之前和之后匹配零个或多个空格。所以所有这些也是有效的。
1.0.0 - abc/1.0.0.0 - xyz.txt
1.0.0-abc/1.0.0.0-xyz.txt
1.0.0 -abc/1.0.0.0- xyz.txt
要进行这种匹配,我有以下正则表达式(Java 代码):
String part1 = "((\\d+.{1}\\d+.{1}\\d+)(\\s*-\\s*(.+))?)";
String part2 = "((\\d+.{1}\\d+.{1}\\d+.{1}\\d+)(\\s*-\\s*(.+))?\\.sql)";
pattern = Pattern.compile(part1+ "/" + part2);
到目前为止,这个正则表达式运行良好。但是在进行单元测试时,我发现了一个我还不能完全弄清楚的案例。用例是如果字符串包含“-”字符被1个或多个空格包围,但“-”字符后没有描述。这看起来像:
1.0.0 - /1.0.0.0.txt
1.0.0- /1.0.0.0-xyz.txt
在这些情况下,我希望模式匹配失败。但是使用我当前的正则表达式匹配成功。我想我想要的是,如果有一个“-”字符被任意数量的空格包围,比如“-”,那么它后面还必须至少有 1 个非空格字符。但我不能完全弄清楚这个正则表达式。
谢谢!
【问题讨论】:
-
*表示 0 或更多,尝试使用+表示 1 或更多 -
@Michael 你的正则表达式很大。请尝试 ([\w\s-./]+)。有用吗??