2008-11-15 172 views
1

積極向前看,我試圖建立一個Java正則表達式匹配「.jar!的感嘆號

美中不足的是,我不希望匹配消耗感嘆號。我嘗試使用Pattern.compile("\\.jar(?=!)")但失敗。正如逃避感嘆號一樣。

任何人都可以得到這個工作,或者這是一個JDK的bug?

UPDATE:我覺得自己像個白癡,Pattern.compile("\\.jar(?=!)")確實有效。我使用Matcher.matches()而不是Matcher.find()。

+0

不要刪除,這仍然是向可能犯同樣錯誤的其他人提供信息。 – 2008-11-15 21:58:14

+0

http://www.oleswanson.com/images/office/mistakes.jpg :) – 2008-11-15 21:59:31

+0

夠公平的,我現在就把它留下:) – Gili 2008-11-15 22:18:58

回答

1

使用正則表達式的工作對我來說(使用Sun JDK 1.6.0_02對於Linux):

import java.util.regex.*; 

public class Regex { 
     private static final String text = ".jar!"; 

     private static final String regex = "\\.jar(?=!)"; 

     public static void main(String[] args) { 
       Pattern pat = Pattern.compile(regex, Pattern.DOTALL); 
       Matcher matcher = pat.matcher(text); 
       if (matcher.find()) { 
         System.out.println("Match: " + matcher.group()); 
       } else { 
         System.out.println("No match."); 
       } 
     } 
} 

打印:

Match: .jar 

(不!)

0

此外,您可以嘗試拳擊它

Pattern.compile("\\.jar(?=[!])") 

的Java必須打破:Perl的

use strict; 
use warnings; 


my @data = qw(.jar .jar! .jarx .jarx!); 


my @patterns = (
    "\\.jar(?=!)", 
    "\\.jar(?=\\!)", 
    "\\.jar(?=[!])", 
); 


for my $pat (@patterns){ 
    for my $inp (@data) { 
    if ($inp =~ /$pat/) { 
     print "$inp =~ $pat \n"; 
    } 
    } 
} 

- >

.jar! =~ \.jar(?=!) 
.jar! =~ \.jar(?=\!) 
.jar! =~ \.jar(?=[!])