簡體   English   中英

正則表達式空白與。 日食

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM