我正在尝试编写一个正则表达式,它将捕获我在Java中尝试匹配的内容,但似乎无法获得它。
这是我最近的尝试:
Pattern.compile( "[A-Za-z0-9]+(/[A-Za-z0-9]+)*/?" );
这就是我想要匹配的内容:
hello
hello/world
hello/big/world
hello/big/world/
这是我不想要的:
/
/hello
hello//world
hello/big//world
我很欣赏任何有关我做错事的见解:)
答案 0 :(得分:0)
试试这个正则表达式:
Pattern.compile( "^[A-Za-z0-9]+(/[A-Za-z0-9]+)*/?$" );
答案 1 :(得分:0)
你的正则表达式最后是否需要问号?
我总是为我的正则表达式进行单元测试,这样我就可以操作它们直到它们通过。
答案 2 :(得分:0)
// your exact regex:
final Pattern regex = Pattern.compile( "[A-Za-z0-9]+(/[A-Za-z0-9]+)*/?" );
// your exact examples:
final String[]
good = { "hello", "hello/world", "hello/big/world", "hello/big/world/" },
bad = { "/", "/hello", "hello//world", "hello/big//world"};
for (String goodOne : good) System.out.println(regex.matcher(goodOne).matches());
for (String badOne : bad) System.out.println(!regex.matcher(badOne).matches());
打印true
值的实心列。
换句话说:你的正则表达式完全正常。
答案 3 :(得分:0)
看起来你正在试图'捕获'被覆盖每个量化的itteration。只需更改括号内容即可。
# "[A-Za-z0-9]+((?:/[A-Za-z0-9]+)*)/?"
[A-Za-z0-9]+
( # (1 start)
(?: / [A-Za-z0-9]+ )*
) # (1 end)
/?
或者,根本没有捕获 -
# "[A-Za-z0-9]+(?:/[A-Za-z0-9]+)*/?"
[A-Za-z0-9]+
(?: / [A-Za-z0-9]+ )*
/?