Слід відповідати наступному:
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}
для узгодження абсолютно будь-якого символу (символи Unicode - це додаткові символи, що закінчуються рядками, додані, не збігаються з .
Java), але просто {.,\n,\r}
працюватимуть для більшості текстових файлів.
[\s\S]
- це популярний спосіб зіставлення будь-яких символів, якщо ви не можете використовувати DOTALL.
Існує безліч складних інструментів тестування та розробок регексу, але якщо ви просто хочете простий джгут тестування на 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");
}