2013-05-15 3 views
0

У меня есть это регулярное выражение в коде ^(\s*\n)+Что означает это регулярное выражение?

Может ли любой орган объяснить, что он ищет?

Я извиняюсь за это глупо question..i потраченные часы, но не смог получить ответ

+0

Строка, начинающаяся с 0 или более символов пробела, по крайней мере один символ новой строки, необязательно повторяемый (так что больше символов пробелов, еще один символ новой строки и т. Д.). – Wrikken

+3

Существует ряд очень удобных инструментов для регулярного выражения в Интернете, например. [this one] (http://rick.measham.id.au/paste/explain.pl?regex=^%28\s*\n%29%2B) или [этот] (http: // regex101. com/r/eO4qY1) или многие другие. – DSM

+0

@DSM Спасибо за ссылки .. Я знал только gskinner regex – javanoob

ответ

-2

Это дает первые строки (которые являются пустыми или имеют только пробельные символы) из строки, каждый из которых в захвате группа

  • ^ отмечает начало строки
  • (..)+ ссылок строки с использованием регулярных выражений в круглых скобках несколько раз (но по крайней мере один раз)
  • \s* не соответствует ни, или любое количество пробельных символов [ \t\r\n], в конечном счете, больше, в зависимости от языка программирования
  • \n соответствует Newline
+0

Не совсем первая строка. Он может фактически соответствовать нескольким пустым строкам. – nhahtdh

+0

Отредактировал свой ответ за секунду до вашего комментария;) – tessi

+0

Первая строка по-прежнему неверна. Он может соответствовать нескольким строкам. – nhahtdh

0

Это означает, что соответствует любой строке, начинающейся с (^) ноль или более пробелов (\s*) за которым следует новый символ линии (\n), за которым следует любое число (+, обозначающее один или несколько) комбинации (\s*\n).

Скобки предназначены для группировки.

6

^ соответствует началу строки. \s соответствует пробелам (пробелы, вкладки и т. Д.). * означает «не соответствует ни одному из них». \n - это новая линия. Скобки группируют их вместе в группе захвата. Значение + означает «соответствовать одному или нескольким» предыдущего выражения.

Вместе это все пустые и пустые ищет строк в начале строки.

+0

'\ s' также может соответствовать новому символу линии, и именно там он становится интересным. Другое дело, что в зависимости от флага могут быть некоторые изменения в поведении регулярного выражения ... – nhahtdh

+0

По-видимому, существуют некоторые диалекты регулярных выражений, в которых '\ s' соответствует пробелу. Если он также соответствует '\ n', как обычно,' + 'является избыточным. Но да, это определенно, по крайней мере, многострочное регулярное выражение, в котором обычно не работают регулярные выражения. – Cairnarvon

+0

'Видимо, есть некоторые диалоги с регулярными выражениями, в которых \ s соответствует пробелу.' Какой? – nhahtdh

0

Матч от начала строки (^) любой из [ \t\r\n] 0 или более раз до последнего \n.

Так с этим регулярным выражением вы в основном пытаетесь соответствовать

1 или более пустых строк (т.е. содержащих только [ \t\r\n]) в то начиная строки


+ в приведенном выше регулярном выражении избыточное и так не имеет значения! ^(\s*\n) правильный!

+0

'[\ t \ r \ n]' - общий набор, но не все. В зависимости от языка может быть больше символов, совпадающих с '\ s'. – nhahtdh

+0

@nhahtdh да действительно .. вы правы, но обвиняете его в том, кто не указал какой-либо язык ..: P – Anirudha

1

Регулярное выражение будет соответствовать началу строки (или началу строки - в зависимости от флага) ^ и соответствует как можно большему количеству пустых строк (\s*\n)+. Пустые строки - это строки, состоящие из только пробельных символов, как определено \s. \n в конце концов ограничивает совпадение до конца пустой строки и не переливается на последовательность символов пробелов в начале строки, которая не состоит целиком из пробельных символов.

Игнорирование группы захвата, регулярное выражение эквивалентно:

^\s*\n 

Причина заключается в том, что \s является стенография символьного класса, который соответствует любому символу пробела, который также может соответствовать новой строке.

Если вы хотите захваченную группу:

^(\s*\n) 

Обратите внимание, что повторение в оригинале регулярного выражения является излишним, так как жадный квантор \s* уже поглотил максимально возможную строку, и нет никакой возможности для вторая итерация повторения.

В зависимости от языка, \s может слегка совместить разных набор символов пробела. Однако в большинстве ароматизаторов регулярных выражений, пространства (ASCII 32), горизонтальной вкладке \t, новой строке \n и возврате каретки \r соответствуют \s. Кроме того, \s может соответствовать символу пробела Unicode (например, .NET) или нет (Java). Подробнее см. В конкретной документации.

Смежные вопросы