У меня есть это регулярное выражение в коде ^(\s*\n)+
Что означает это регулярное выражение?
Может ли любой орган объяснить, что он ищет?
Я извиняюсь за это глупо question..i потраченные часы, но не смог получить ответ
У меня есть это регулярное выражение в коде ^(\s*\n)+
Что означает это регулярное выражение?
Может ли любой орган объяснить, что он ищет?
Я извиняюсь за это глупо question..i потраченные часы, но не смог получить ответ
Это дает первые строки (которые являются пустыми или имеют только пробельные символы) из строки, каждый из которых в захвате группа
^
отмечает начало строки(..)+
ссылок строки с использованием регулярных выражений в круглых скобках несколько раз (но по крайней мере один раз)\s*
не соответствует ни, или любое количество пробельных символов [ \t\r\n]
, в конечном счете, больше, в зависимости от языка программирования\n
соответствует NewlineЭто означает, что соответствует любой строке, начинающейся с (^
) ноль или более пробелов (\s*
) за которым следует новый символ линии (\n
), за которым следует любое число (+
, обозначающее один или несколько) комбинации (\s*\n
).
Скобки предназначены для группировки.
^
соответствует началу строки. \s
соответствует пробелам (пробелы, вкладки и т. Д.). *
означает «не соответствует ни одному из них». \n
- это новая линия. Скобки группируют их вместе в группе захвата. Значение +
означает «соответствовать одному или нескольким» предыдущего выражения.
Вместе это все пустые и пустые ищет строк в начале строки.
'\ s' также может соответствовать новому символу линии, и именно там он становится интересным. Другое дело, что в зависимости от флага могут быть некоторые изменения в поведении регулярного выражения ... – nhahtdh
По-видимому, существуют некоторые диалекты регулярных выражений, в которых '\ s' соответствует пробелу. Если он также соответствует '\ n', как обычно,' + 'является избыточным. Но да, это определенно, по крайней мере, многострочное регулярное выражение, в котором обычно не работают регулярные выражения. – Cairnarvon
'Видимо, есть некоторые диалоги с регулярными выражениями, в которых \ s соответствует пробелу.' Какой? – nhahtdh
Матч от начала строки (^
) любой из [ \t\r\n]
0 или более раз до последнего \n
.
Так с этим регулярным выражением вы в основном пытаетесь соответствовать
1 или более пустых строк (т.е. содержащих только [ \t\r\n]
) в то начиная строки
+
в приведенном выше регулярном выражении избыточное и так не имеет значения! ^(\s*\n)
правильный!
Регулярное выражение будет соответствовать началу строки (или началу строки - в зависимости от флага) ^
и соответствует как можно большему количеству пустых строк (\s*\n)+
. Пустые строки - это строки, состоящие из только пробельных символов, как определено \s
. \n
в конце концов ограничивает совпадение до конца пустой строки и не переливается на последовательность символов пробелов в начале строки, которая не состоит целиком из пробельных символов.
Игнорирование группы захвата, регулярное выражение эквивалентно:
^\s*\n
Причина заключается в том, что \s
является стенография символьного класса, который соответствует любому символу пробела, который также может соответствовать новой строке.
Если вы хотите захваченную группу:
^(\s*\n)
Обратите внимание, что повторение в оригинале регулярного выражения является излишним, так как жадный квантор \s*
уже поглотил максимально возможную строку, и нет никакой возможности для вторая итерация повторения.
В зависимости от языка, \s
может слегка совместить разных набор символов пробела. Однако в большинстве ароматизаторов регулярных выражений, пространства (ASCII 32), горизонтальной вкладке \t
, новой строке \n
и возврате каретки \r
соответствуют \s
. Кроме того, \s
может соответствовать символу пробела Unicode (например, .NET) или нет (Java). Подробнее см. В конкретной документации.
Строка, начинающаяся с 0 или более символов пробела, по крайней мере один символ новой строки, необязательно повторяемый (так что больше символов пробелов, еще один символ новой строки и т. Д.). – Wrikken
Существует ряд очень удобных инструментов для регулярного выражения в Интернете, например. [this one] (http://rick.measham.id.au/paste/explain.pl?regex=^%28\s*\n%29%2B) или [этот] (http: // regex101. com/r/eO4qY1) или многие другие. – DSM
@DSM Спасибо за ссылки .. Я знал только gskinner regex – javanoob