Я использую регулярные выражения, и я наткнулся на^xxx и xxx $, что означает совпадение xxx regex в начале строки и соответствует регулярному выражению xxx в конце строки. explaing это с примером, я с трудом понимая это
ответ
Это все сводится к тому, какой метод вы используя для соответствия.
Если вы используете String.matches()
, то он будет рассматривать всю строку поэтому определение ^
или $
совершенно бесполезно.
При использовании Pattern
и Matcher
, чтобы соответствовать, то вы можете использовать ^
и $
так:
Пример: 1
public static void main(String[] args) {
String s = "abcabc";
Pattern p = Pattern.compile("abc");
Matcher m = p.matcher(s);
System.out.println(m.find());
System.out.println(m.start()); // prints starting index of match
}
O/P:
true
0
Пример: 2
public static void main(String[] args) {
String s = "abcabc";
Pattern p = Pattern.compile("abc$");
Matcher m = p.matcher(s);
System.out.println(m.find());
System.out.println(m.start()); // prints starting index of match
}
O/P:
true
3
Пример -3:
public static void main(String[] args) {
String s = "xxabc\nabc";
Pattern p = Pattern.compile("^abc");
Matcher m = p.matcher(s);
System.out.println(m.find());
System.out.println(m.start());
}
false
Exception in thread "main" java.lang.IllegalStateException: No match available
at java.util.regex.Matcher.start(Unknown Source)
at Test.main(Test.java:10) --> OOPs.. Not at the beginning?
^xxx
матчи все строки начинаются с которым xxx
- xxx1234 -> матч
- xxxABDcx -> матч
- xxassas -> не ровня
xxx$
матчи все строки не заканчивается xxx
- 1234xxx -> матч
- Acdsadsxx -> нет матча
Это имеет смысл, если вы ищете для некоторых частей строки, как в этом поиске и заменить, например:
System.out.println("test test test".replaceAll("^test", "TEST"));
System.out.println("test test test".replaceAll("test$", "TEST"));
Выходы
TEST test test
test test TEST
Но если вы пытаетесь соответствовать всей строке вы получаете ^
и $
подставляется автоматически:
System.out.println("test test test".matches("test"));
System.out.println("test test test".matches("^test$")); // The same
и возвращают false
.
Значение:
^
- Начало документа/строки.$
- Конец документа/строка.
Краткие примеры:
- "найти файлы, чьи авторы имеют отвратительную привычку набрав возврат каретки в конце":
\n$
Pattern pattern = Pattern.compile("\n$");
String string1 = "This is a document.";
String string2 = "This is a document.\n";
Matcher matcher1 = pattern.matcher(string1);
Matcher matcher2 = pattern.matcher(string2);
System.out.println(matcher1.find());// false
System.out.println(matcher2.find());// true
- "найти документы, которые начинаются с буквы":
^[A-Z]
Pattern pattern = Pattern.compile("^[A-Z]");
String string1 = "This is a document.";
String string2 = "this is a document.";
Matcher matcher1 = pattern.matcher(string1);
Matcher matcher2 = pattern.matcher(string2);
System.out.println(matcher1.find());// true
System.out.println(matcher2.find());// false
Простой пример был бы:
System.out.println("abc".replaceAll("abc", "xxx"));
System.out.println("abc".replaceAll("bc", "xx"));
System.out.println("abc".replaceAll("^bc", "xx"));
System.out.println("abc".replaceAll("bc$", "xx"));
System.out.println("abc".replaceAll("^ab", "xx"));
System.out.println("abc".replaceAll("ab$", "xx"));
И выход:
xxx
axx
abc
axx
xxc
abc
Где x
представляет собой совпадение символов.
Этот код:
if (Pattern.matches("^123.*", "123blablabla")) {
System.out.println("It matches!");
}
else {
System.out.println("It does not match!");
}
Выведет:
Это соответствует!
потому что строка «123blablabla» начинается с «123», а за ней следует ноль или более символов («. *» В языке regexp).
Аналогичным образом, следующий код:
if (Pattern.matches(".*abc$", "some string that ends with abc")) {
System.out.println("It matches!");
}
else {
System.out.println("It does not match!");
}
выведет
Это соответствует!
потому что строка «некоторая строка, которая заканчивается на abc» заканчивается на «abc».
- 1. Группировка в регулярных выражениях
- 2. : нотация в регулярных выражениях
- 3. Непревзойденная (в регулярных выражениях
- 4. Назначение (. +?) В регулярных выражениях
- 5. скобка в регулярных выражениях
- 6. Кронштейны в регулярных выражениях
- 7. Соответствие Unicode Dash в регулярных выражениях Java?
- 8. Каков эффект «*» в регулярных выражениях?
- 9. Javascript: Разница в регулярных выражениях и регулярных выражениях
- 10. Повторяющиеся символы в регулярных выражениях
- 11. Логическое ИЛИ в регулярных выражениях
- 12. Lookahead в регулярных выражениях Oracle
- 13. Confused в регулярных выражениях-Python
- 14. цитаты в яве регулярных выражениях
- 15. Специальные символы в регулярных выражениях
- 16. значения Append в регулярных выражениях
- 17. Факультативные группы в регулярных выражениях
- 18. Двойной EOL в регулярных выражениях
- 19. Замена символов в регулярных выражениях
- 20. Capture $ в регулярных выражениях Python
- 21. Perl: Максимум в регулярных выражениях?
- 22. Замена @ символов в регулярных выражениях
- 23. Что: делать в регулярных выражениях
- 24. ИЛИ пункт в регулярных выражениях
- 25. Или оператор в регулярных выражениях
- 26. Определить логику в регулярных выражениях
- 27. Объединение в регулярных выражениях powershell
- 28. необязательный символ в регулярных выражениях
- 29. Якоря в регулярных выражениях .NET.
- 30. Разница в регулярных выражениях (Regex)
Не в начале _line_, а в начале _input_. Regex '^' будет соответствовать до 'foo' в' foo \ nbar', но не до 'bar'. – fge
Если включен многострочный режим. – sp00m
Да, это, но давайте все упростим для OP, который, похоже, не понимает концепций этих якорей ... – fge