2012-11-12 24 views
5

ben aşağıdakiler için bir regex bulmaya çalışıyorum: WORD herhangi bir kelime olabilir tam olarak @[email protected] eşleşenJava ve örnek olarak geriye dönük regex

Tüm dünyalar hiç ama sadece bir = peşinde. Aşağıdaki yaptı: sadece [email protected]@ veya @[email protected] ama = @[email protected] için değil benzer modelleri ama çalışıyor
(?<==)#.*?#).
Ayrıca ile ilgileniyorum, ancak = bunu takip edemedim.
Neyse bir şey kullanarak: (?<=\\s*=\\s*)#.*?#) ama işe yaramıyor.
Herhangi bir fikrin var mı?

Not: Garip ama here gelen değişken uzunluk olan ileriye dönük Java desteklenen değil olduğunu söylüyor ama bu isteğe bağlı bir boşluk ve ardından

cevap

0

Bu model bir eşittir eşleşen bir istisna ve kaplı bir kelime bana vermez @ sembolleri: sana başarmak isteyen görevi yanlış anladın sürece

Pattern pattern = Pattern.compile("= [email protected](.*)@"); 
Matcher matcher = pattern.matcher("[email protected]@"); 
if (matcher.matches()) { 
    System.out.println(matcher.group(1)); 
} 

// Prints: "WORD" 

, bir olan ileriye dönük ihtiyaç göremiyorum. Ancak, şu çalışmalıdır:

Pattern pattern = Pattern.compile("(?<== ?)@(.*)@"); 
Matcher matcher = pattern.matcher("= @[email protected]"); 
if (matcher.find()) { 
    System.out.println(matcher.group(1)); 
} 

// Prints: "WORD" 

negatif desen sonra gerçekleştirilir şöyledir: Eğer görünüm arkasında kullanıyorsanız

Pattern pattern = Pattern.compile("(?<!= ?)@(.*)@"); 
Matcher matcher = pattern.matcher("[email protected]@"); 
System.out.println(matcher.find()); 

// Prints: "false" 
1

, ben doğrudan Pattern ve Matcher kullanarak varsayarak yaşıyorum, kelimeleri temiz tutmak için ("= @[email protected]" yerine "@[email protected]").

Eğer durum gerçekten de ise, tüm yapmanız gereken içinde isteğe bağlı beyaz boşluk eklemek olduğunu görünüm arkasında:

İşte (?<==\\s?)@.*[email protected]


"@[email protected]" dönen bir test-koddur :

Matcher m = Pattern.compile("(?<==\\s?)@.*[email protected]").matcher("= @[email protected]"); 
m.find(); 
System.out.println(m.group()); 
İlgili konular