2008-12-30 120 views
0

我正嘗試做一個正則表達式匹配一個空白,到目前爲止I'm這樣做:RegEx Whitespace Vs. Eclipse的

Powered[\s]*[bB]y.*MyBB 

我知道它應該工作,因爲我已經和正則表達式好友嘗試過了,它說,它但是當我嘗試運行它與Eclipse它標誌着一個錯誤,說它不是一個有效的轉義序列,它會自動添加2'\'呈現正則表達式無用....有人可以告訴我該怎麼辦?我到目前爲止已經結束了使用一個點而不是\ S,但我真正需要的是\ S ...

感謝


新增

嗯,我明白了但我認爲'\s'用於任何空格字符,正如我所說的,Regex Buddy也認識到這一點,如果我使用'\s',它在Regex Buddy中無法識別,因此測試失敗,但在eclipse中它允許我繼續,即使它沒有匹配...... = /或者我沒有得到什麼?

+0

「Eclipse」是一個工具。你是用Java,JavaScript,Python編寫代碼嗎?或者它在Eclipse的查找工具中? – PhiLho 2008-12-30 14:40:01

回答

0

究竟是什麼意思在Eclipse中使用正則表達式?你正在嘗試在IDE中進行搜索和替換嗎,還是在嘗試在Java代碼中使用正則表達式?

如果要在Java代碼中使用正則表達式,請在RegexBuddy的「使用」選項卡上生成Java源代碼片段,然後將其粘貼到代碼中。

如果您希望單獨準備將正則表達式粘貼到Java代碼中,請在RegexBuddy頂部的工具欄中選擇Java風格。然後點擊Copy按鈕,然後選擇Copy Regex as Java String。然後,RegexBuddy會將您的正則表達式複製到剪貼板,其格式爲Java字符串。您正則表達式將被複製爲:

"Powered[\\s]*[bB]y.*MyBB" 

額外的反斜槓使用Java字符串字面來存儲你的正則表達式時是必不可少的。

P.S .:您可以使用\ s而不是[\ s]。保存兩個按鍵。

3

''在java中標識轉義字符,所以如果你想自己使用它,你需要轉義它。 (\ t是選項卡,\ n是換行等) 爲了逃避它,你需要添加1「\」,而不是2

下面是一些對你的Java代碼將這樣的伎倆:

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

import org.junit.Assert; 
import org.junit.Test; 


public class RegexTest { 
    @Test 
    public void testPatternWithWhiteSpace(){ 
     Pattern pattern = Pattern.compile("Powered\\s*[bB]y.*MyBB"); 
     Matcher matcher = pattern.matcher("Powered  By  MyBB"); 
     Assert.assertTrue(matcher.matches()); 
     matcher = pattern.matcher("Powered_By  MyBB"); 
     Assert.assertFalse(matcher.matches()); 
    } 
} 

您不必將空白'標記'(\ s)放在字符集([])中。

你是對的,\ s是任何空格。

正則表達式好友需要輸入,因爲正則表達式實際上是寫入的,eclipse /源代碼中的字符串表達式需要被轉義。 如果你想從一個屬性文件中讀取模式,你不需要轉義它。

正如我所說的,正則表達式的好友也承認 它是這樣的,如果我用\ S是不 在正則表達式好友公認因此 測試失敗

我假設你的意思月蝕在那裏失敗? 這些線路只需添加到測試,也許這可以解釋它多一點:

 matcher = pattern.matcher("Powered\t\n\r By  MyBB"); 
     Assert.assertTrue(matcher.matches()); 
     matcher = pattern.matcher("Powered\t\n\r ,By  MyBB"); 
     Assert.assertFalse(matcher.matches());