Следующее должно соответствовать:
AAA123
ABCDEFGH123
XXXX123
я могу сделать: ".*123"
?
Следующее должно соответствовать:
AAA123
ABCDEFGH123
XXXX123
я могу сделать: ".*123"
?
Ответы:
Да, ты можешь. Это должно работать.
.
= любой символ\.
= фактический символ точки.?
= .{0,1}
= соответствовать любому символу ноль или один раз.*
= .{0,}
= соответствовать любому символу ноль или более раз.+
= .{1,}
= соответствовать любому символу один или несколько разДа, это будет работать, хотя обратите внимание, что .
они не будут соответствовать символам новой строки, если вы не передадите флаг DOTALL при компиляции выражения:
Pattern pattern = Pattern.compile(".*123", Pattern.DOTALL);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.matches();
.
что будет соответствовать символам новой строки. Я рад, что прочитал ваш ответ, мне нужно это использовать!
{.,\n,\r,\u2028,\u2029,\u0085}
для сопоставления абсолютно любой символ (символы Юникода являются дополнительными символами в конце строки, добавляемыми без совпадения .
в Java), но они {.,\n,\r}
будут работать для большинства текстовых файлов.
[\s\S]
- это популярный способ сопоставления любого символа, если вы не можете использовать DOTALL.
(?:.|\\v)*
из-за JDK-6337993 .
Существует множество сложных инструментов тестирования и разработки регулярных выражений, но если вы просто хотите использовать простой тестовый набор в Java, вот вам один из них:
String[] tests = {
"AAA123",
"ABCDEFGH123",
"XXXX123",
"XYZ123ABC",
"123123",
"X123",
"123",
};
for (String test : tests) {
System.out.println(test + " " +test.matches(".+123"));
}
Теперь вы можете легко добавлять новые тестовые случаи и пробовать новые шаблоны. Веселитесь, изучая регулярные выражения.
Нет, *
будет соответствовать нулю или более символов. Вы должны использовать +
, который соответствует одному или более.
Это выражение может работать лучше для вас: [A-Z]+123
Самый распространенный способ кодирования этого кода - класс символов, члены которого образуют разделение множества возможных символов.
Обычно люди пишут это как [\s\S]
(пробел или не пробел), хотя [\w\W]
, [\d\D]
и т. Д. Все будет работать.
.*
и.+
для любых символов, кроме новых строк.
На всякий случай, вы хотели бы включить новые строки, следующие выражения могут также работать для тех языков, для которых требуется двойное экранирование, таких как Java или C ++:
[\\s\\S]*
[\\d\\D]*
[\\w\\W]*
для нуля или более раз, или
[\\s\\S]+
[\\d\\D]+
[\\w\\W]+
за один или несколько раз.
Двойное экранирование не требуется для некоторых языков, таких как, C #, PHP, Ruby, PERL, Python, JavaScript:
[\s\S]*
[\d\D]*
[\w\W]*
[\s\S]+
[\d\D]+
[\w\W]+
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegularExpression{
public static void main(String[] args){
final String regex_1 = "[\\s\\S]*";
final String regex_2 = "[\\d\\D]*";
final String regex_3 = "[\\w\\W]*";
final String string = "AAA123\n\t"
+ "ABCDEFGH123\n\t"
+ "XXXX123\n\t";
final Pattern pattern_1 = Pattern.compile(regex_1);
final Pattern pattern_2 = Pattern.compile(regex_2);
final Pattern pattern_3 = Pattern.compile(regex_3);
final Matcher matcher_1 = pattern_1.matcher(string);
final Matcher matcher_2 = pattern_2.matcher(string);
final Matcher matcher_3 = pattern_3.matcher(string);
if (matcher_1.find()) {
System.out.println("Full Match for Expression 1: " + matcher_1.group(0));
}
if (matcher_2.find()) {
System.out.println("Full Match for Expression 2: " + matcher_2.group(0));
}
if (matcher_3.find()) {
System.out.println("Full Match for Expression 3: " + matcher_3.group(0));
}
}
}
Full Match for Expression 1: AAA123
ABCDEFGH123
XXXX123
Full Match for Expression 2: AAA123
ABCDEFGH123
XXXX123
Full Match for Expression 3: AAA123
ABCDEFGH123
XXXX123
Если вы хотите изучить выражение, это было объяснено на верхней правой панели regex101.com . Если вы хотите, вы также можете посмотреть в этой ссылке , как она будет сопоставляться с некоторыми примерами входных данных.
jex.im визуализирует регулярные выражения:
(\W|\w)*
вместо двойного побега
Конкретное решение проблемы примера: -
Пытаться [A-Z]*123$
будет соответствовать 123
, AAA123
, ASDFRRF123
. В случае, если вам нужен хотя бы персонаж перед 123
использованием [A-Z]+123$
.
Общее решение вопроса (Как сопоставить «любой символ» в регулярном выражении):
[\w|\W]{min_char_to_match,}
.[\S]{min_char_to_match,}
.[^]
должен соответствовать любому символу, включая перевод строки. [^
CHARS]
соответствует всем символам, кроме символов CHARS . Если CHARS пуст, он соответствует всем символам.
Пример JavaScript:
/a[^]*Z/.test("abcxyz \0\r\n\t012789ABCXYZ") // Returns ‘true’.
Попробуйте регулярное выражение .{3,}
. Это будет соответствовать всем символам, кроме новой строки.
Я работаю над этим Не всегда точка означает любой символ. Исключение при однострочном режиме. \p{all}
должно быть
String value = "|°¬<>!\"#$%&/()=?'\\¡¿/*-+_@[]^^{}";
String expression = "[a-zA-Z0-9\\p{all}]{0,50}";
if(value.matches(expression)){
System.out.println("true");
} else {
System.out.println("false");
}