RegEx Whitespace Vs. Затмение - PullRequest
       19

RegEx Whitespace Vs. Затмение

0 голосов
/ 30 декабря 2008

Я пытаюсь создать регулярное выражение для соответствия пробелу, и до сих пор я делаю это:

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

Я знаю, что это должно работать, потому что я пробовал это с Regex Buddy, и он говорит, что это работает, но когда я пытаюсь запустить его с Eclipse, он отмечает ошибку, говоря, что это недопустимая escape-последовательность, и он автоматически добавляет 2 ´ \ ´ сделав регулярное выражение бесполезным .... может кто-нибудь сказать мне, что делать? До сих пор я использовал точку вместо \ s, но мне действительно нужно \ s ...

Спасибо


Добавлена ​​

Хорошо, я понимаю, но, хотя '\s' используется для любого символа пробела, и, как я уже сказал, Regex Buddy также распознает его как таковой, и если я использую '\s', он не распознается в Regex. Приятель, следовательно, тест не пройден, но в затмении он позволяет мне продолжать, даже если он ничего не соответствует ... = / или я что-то не получил?

Ответы [ 2 ]

3 голосов
/ 30 декабря 2008

«\» идентифицирует escape-символ в 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());
    }
}

Вам не нужно помещать пробел 'token' (\ s) в набор символов ([]).

вы правы, \ s - любые пробелы.

Regex buddy нужен ввод, поскольку регулярное выражение действительно написано, буквенное строковое выражение в eclipse / source code должно быть экранировано Если вы прочитаете шаблон, скажем, из файла свойств, вам не нужно будет экранировать его.

как я уже сказал, 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());
1 голос
/ 31 декабря 2008

Что именно вы имеете в виду, используя регулярное выражение в Eclipse? Вы пытаетесь выполнить поиск и замену в IDE, или вы пытаетесь использовать регулярное выражение в своем коде Java?

Если вы хотите использовать регулярное выражение в коде Java, сгенерируйте фрагмент исходного кода Java на вкладке Использование в RegexBuddy и вставьте его в свой код.

Если вы хотите получить готовое к вставке регулярное выражение в код Java, выберите вариант Java на панели инструментов в верхней части RegexBuddy. Затем нажмите кнопку «Копировать» и выберите «Копировать регулярное выражение в виде строки Java». Затем RegexBuddy скопирует ваше регулярное выражение в буфер обмена, правильно отформатированный как строка Java. Ваше регулярное выражение будет скопировано как:

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

Дополнительная обратная косая черта необходима при использовании строкового литерала Java для хранения вашего регулярного выражения.

P.S .: Вы можете использовать \ s вместо [\ s]. Сохраняет два нажатия клавиш.

...