![](/img/trans.png)
[英]RegEx: Using /i vs. /g (/g replaces whitespace but /i doesn't)
[英]RegEx Whitespace Vs. Eclipse
我試圖做一個正則表達式來匹配空格,到目前為止,我正在這樣做:
Powered[\s]*[bB]y.*MyBB
我知道它應該工作,因為我已經用Regex Buddy嘗試過了,它說可以,但是當我嘗試用Eclipse運行它時,它指出了一個錯誤,說這不是有效的轉義序列,它會自動添加2´\\´來渲染正則表達式沒用...。有人可以告訴我該怎么做嗎? 到目前為止,我最終使用的是點而不是\\ s,但我真正需要的是\\ s ...
謝謝
新增 :
好吧,我明白了,但是,盡管我將' \\s
'用於任何空格字符,並且正如我所說,Regex Buddy也可以識別它,如果我使用' \\s
',則在Regex Buddy中無法識別,因此測試失敗,但是在月食中它讓我繼續前進,即使它什么都不匹配... = /還是沒有得到任何東西?
'\\'標識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 /源代碼中的文字字符串表達式。 如果您從某個屬性文件中讀取該模式,則無需對其進行轉義。
如我所說,Regex Buddy也可以識別它,如果我使用\\ s,則Regex Buddy無法識別它,因此測試失敗
我假設您的意思是在失敗的地方蝕? 只需將這些行添加到測試中,也許可以進一步解釋一下:
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());
在Eclipse中使用正則表達式到底意味着什么? 您是要在IDE中進行搜索和替換,還是要在Java代碼中使用正則表達式?
如果要在Java代碼中使用正則表達式,請在RegexBuddy的“使用”選項卡上生成Java源代碼片段,然后將其粘貼到您的代碼中。
如果要單獨准備將正則表達式粘貼到Java代碼中,請在RegexBuddy頂部的工具欄中選擇Java風格。 然后單擊“復制”按鈕,然后選擇“將正則表達式復制為Java字符串”。 然后,RegexBuddy將把您的正則表達式復制到正確設置為Java字符串格式的剪貼板中。 您的正則表達式將被復制為:
"Powered[\\s]*[bB]y.*MyBB"
使用Java字符串文字存儲正則表達式時,額外的反斜杠必不可少。
PS:您可以使用\\ s代替[\\ s]。 保存兩次擊鍵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.