Metacharacters, когда в классе персонажа (`[]`)JAVA

Программисты JAVA общаются здесь
Anonymous
Metacharacters, когда в классе персонажа (`[]`)

Сообщение Anonymous »

Мое понимание java regex это. Существует два набора метахарактеров:


Используется в регулярном выражении вне классов символов (прилагается в [] ): < /ul>

Если мы хотим, чтобы определенный символ (например, дефис -< /code>) буквально соответствовал классу символов, нам придется избежать его с помощью обратной связи (\< /code>). < /p>

Эта точка зрения поддерживается следующим описанием в Java doc < /p>


классы символов < /strong>
классы символов могут появиться в других классах символа
и могут быть сочинены Operator (Imploce Imploice) и
и). Оператор Union обозначает класс, который
содержит каждый символ, который находится по крайней мере в одном из его операндов
классов. Оператор пересечения обозначает класс, который содержит каждый символ
, который находится в обоих классах операнда. < /li>
Диапазон a-z < /li>
Union [a-e] [i-u] < /li>
пересечение [a-z && [aeiou]] < /li>
< /ol>

Обратите внимание, что
отличается от Metachar-nation a Getharcts harember, чем в Graft Amefore, чем в Br />, чем в отличном классе. Класс. Я думал, что метод предназначен только для первого набора метахарактеров. Класс: < /p>

import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;

import java.util.regex.Pattern;

public class RegexTest {
@Rule
public TestName testName = new TestName();

@Test
public void testHyphenCharClassByPatternQuote() {
String regex = "[" + Pattern.quote("-") + "]";
Pattern p = Pattern.compile(regex);
String[] tests = {
"-"
, "a"
};
for (String test : tests) {
System.out.println(testName.getMethodName() + " matching " + test + ":" + p.matcher(test).matches());
}
}

@Test
public void testHyphenCharClassByBackSlash() {
String regex = "[\\-]";
Pattern p = Pattern.compile(regex);
String[] tests = {
"-"
, "a"
};
for (String test : tests) {
System.out.println(testName.getMethodName() + " matching " + test + ":" + p.matcher(test).matches());
}
}

@Test
public void testHyphenCharClassByQE() {
String regex = "[\\Q-\\E]";
Pattern p = Pattern.compile(regex);
String[] tests = {
"-"
, "a"
};
for (String test : tests) {
System.out.println(testName.getMethodName() + " matching " + test + ":" + p.matcher(test).matches());
}
}

}
< /code>

test output < /strong> < /p>

testHyphenCharClassByQE matching -:true
testHyphenCharClassByQE matching a:false
testHyphenCharClassByBackSlash matching -:true
testHyphenCharClassByBackSlash matching a:false
testHyphenCharClassByPatternQuote matching -:true
testHyphenCharClassByPatternQuote matching a:false


Подробнее здесь: https://stackoverflow.com/questions/572 ... cter-class

Вернуться в «JAVA»