Разделение строки по символу канала не работает с регулярным выражением [duplicate]

  Строка str;  String path = "C: / Users / ... путь .... / iin.txt";  // вы можете ввести также .. я создал этот путь: P BufferedReader br = новый BufferedReader (новый InputStreamReader (System.in));  PrintWriter pw = новый PrintWriter (новый FileWriter (путь, истина));  try {while (true) {System.out.println ("Введите текст:");  str = br.readLine ();  if (str.equalsIgnoreCase («exit»)) break;  else pw.println (str);  }} catch (Исключение e) {// oh noes!  } наконец {pw.close ();  }  

это сделает то, что вы намереваетесь ..

59
задан David19801 20 December 2011 в 14:14
поделиться

9 ответов

Они называются кванторами.

* 0 или более из предыдущего выражения

+ 1 или более из предыдущего выражения

Per по умолчанию квантификатор жадный, это означает, что он соответствует как можно большему количеству символов.

? после квантификатора изменяет поведение, чтобы сделать этот квантификатор «неровным», означает, что он будет соответствовать как можно меньше.

Пример greedy / ungreedy

Например, в строке « abab »

a.*b будет соответствовать «abab» (preg_match_all будет возвращать одно совпадение «abab»)

, в то время как a.*?b будет соответствовать только стартовому «ab» (preg_match_all вернет два совпадения, «ab»)

Вы можете проверить ваши регулярные выражения онлайн, например на Regexr, см. жадный пример здесь

95
ответ дан Morten Jensen 16 August 2018 в 01:34
поделиться

Я думаю, что в предыдущих ответах не удалось выделить простой пример:

, например, у нас есть массив:

numbers = [5, 15]

Следующее выражение регулярного выражения ^[0-9]+ соответствует: 15 только. Однако ^[0-9]* соответствует как 5 and 15. Разница в том, что для оператора + требуется, по крайней мере, один дубликат предыдущего выражения регулярного выражения

0
ответ дан Crt 16 August 2018 в 01:34
поделиться

A + соответствует одному или нескольким экземплярам предыдущего шаблона. * соответствует нулю или более экземплярам предыдущего шаблона.

Итак, в основном, если вы используете +, должен быть хотя бы один экземпляр шаблона, если вы используете *, он будет по-прежнему совпадают, если нет экземпляров.

5
ответ дан DaveRandom 16 August 2018 в 01:34
поделиться

+ минимальна, * также может быть нулевой.

5
ответ дан jeroen 16 August 2018 в 01:34
поделиться

Звезда очень похожа на плюс, единственное отличие состоит в том, что, когда плюс соответствует 1 или более предшествующим символу / группе, начало соответствует 0 или более.

3
ответ дан Madara Uchiha 16 August 2018 в 01:34
поделиться

В RegEx {i,f} означает, что «между i и f соответствует». Давайте посмотрим на следующие примеры:

  • {3,7} означает от 3 до 7 соответствий
  • {,10} означает до 10 совпадений без нижнего предела (т.е. нижний предел равен 0)
  • {3,} означает не менее 3 совпадений без верхнего предела (т.е. верхний предел бесконечен)
  • {,} означает, что верхний предел или нижний предел для количество совпадений (т. е. нижний предел равен 0, а верхний предел бесконечен)
  • {5} означает ровно 4

Большинство хороших языков содержат сокращения, RegEx:

  • + является сокращением для {1,}
  • * является сокращением для {,}
  • ? является сокращенное значение для {,1}

Это означает, что + требует не менее 1 совпадения, в то время как * принимает любое количество совпадений или не имеет совпадений вообще, а ? принимает не более 1 совпадающие или нулевые.

Кредит: Codecademy.com

1
ответ дан Miladiouss 16 August 2018 в 01:34
поделиться

Первый (+) - один или несколько символов . Второй (*) - ноль или более символов . Оба не являются жадными (?) и соответствуют чему-либо (.).

17
ответ дан Quentin 16 August 2018 в 01:34
поделиться

Рассмотрим следующую строку:

ab

Образец (ab.*) вернет совпадение для группы захвата с результатом ab

Пока шаблон (ab.+) не будет соответствовать и ничего не возвращать.

Но если вы измените строку на следующую, она вернет aba для шаблона (ab.+)

aba
3
ответ дан wajatimur 16 August 2018 в 01:34
поделиться

+ соответствует хотя бы одному символу

* соответствует любому числу (включая 0) символов

. ? указывает ленивое выражение, поэтому оно будет соответствовать как можно меньше символов.

6
ответ дан Xophmeister 16 August 2018 в 01:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: