2014-09-26 42 views
0

我在想什么?java正则表达式提取不起作用?

这是 'dataStoreConstructor' 我传递到下面的方法代码 -

url='https://www.salesforce.com/services/Soap/u/26.0',corpnet_prodnet='Corpnet' 


public void registerDataStoreInRepository(String dataStoreConstructor) throws DragonException{ 
    String constructorPattern = "url='([^']*?)',corpnet_prodnet='([^']*?)'"; 
    System.out.println(constructorPattern); 
    System.out.println(dataStoreConstructor); 
    Pattern pattern = Pattern.compile(constructorPattern); 
    Matcher matcher = pattern.matcher(dataStoreConstructor); 

    SalesforceDataStore sfDataStore = new SalesforceDataStore.Builder(this, matcher.group(1), matcher.group(0)).build(); 
    }; 


这是我看到的输出 -

url='([^']*?)',corpnet_prodnet='([^']*?)'Exception in thread "main" 
url='https://www.salesforce.com/services/Soap/u/26.0',corpnet_prodnet='Corpnet' 
java.lang.IllegalStateException: No match found 
    at java.util.regex.Matcher.group(Matcher.java:485) 
    at com.dragon.dictionary.salesforce.SalesforcePlatform.registerDataStoreInRepository(SalesforcePlatform.java:63) 
+0

它在此正常工作http://regex101.com/r/lS5tT3/39 – vks 2014-09-26 05:41:58

+0

对输出中的错字感到抱歉 - 为什么会造成'找不到匹配'异常呢? – 2014-09-26 05:45:08

+1

该模式看起来不错,但是由于您使用否定字符类,所以懒惰量词无用:''([^'] *)' – 2014-09-26 05:52:17

回答

2

使用此:

if (matcher.find()) { 
    SalesforceDataStore sfDataStore = new SalesforceDataStore.Builder(this, matcher.group(1), matcher.group(0)).build(); 
} 

你忘了告诉匹配去找到:-)

+1

+1:完整解决方案。你用1秒打败我:-) – blackSmith 2014-09-26 05:51:14

3

正则表达式的罚款。只需拨打电话:

matcher.find() 

一次在致电matcher.group()之前。您的问题将得到解决。