如何在Java中使用Oracle正则表达式来获得相同的结果,或者如何基于Oracle正则表达式构建Java正则表达式.
甲骨文:
declare
str1 varchar2(50);
begin
str1 := REGEXP_SUBSTR('500 Oracle Parkway, Redwood Shores, CA', ',[^,]+,');
DBMS_OUTPUT.PUT_LINE(str1);
end;
Run Code Online (Sandbox Code Playgroud)
结果:
, Redwood Shores,
Run Code Online (Sandbox Code Playgroud)
Java的:
String str1 = null;
Pattern pattern = Pattern.compile(",[^,]+,");
Matcher matcher = pattern.matcher("500 Oracle Parkway, Redwood Shores, CA");
if (matcher.find())
{
str1 = matcher.group(1);
}
Run Code Online (Sandbox Code Playgroud)
但是这个正则表达式在Java中不起作用.它失败并出现此异常:
Exception in thread "main" java.lang.IndexOutOfBoundsException: No group 1
at java.util.regex.Matcher.group(Matcher.java:538)
at mousemover.Playground.main(Playground.java:16)
Run Code Online (Sandbox Code Playgroud)
也许有一些算法来映射正则表达式?
使用Matcher.group()或Matcher.group(0)查找匹配项.调用组1将无法正常工作,因为您未在正则表达式中指定所谓的捕获组.
捕获组从左到右编制索引,从1开始.组零表示整个模式,因此表达式
m.group(0)相当于m.group().