Как найти пустую строку регулярные выражения

I am trying to make simple regex that will check if a line is blank or not.

Case;

"    some"   // not blank
"   " //blank
"" // blank

Lior Elrom's user avatar

Lior Elrom

19.4k16 gold badges80 silver badges92 bronze badges

asked Jun 10, 2010 at 8:28

Adnan's user avatar

1

The pattern you want is something like this in multiline mode:

^s*$

Explanation:

  • ^ is the beginning of string anchor.
  • $ is the end of string anchor.
  • s is the whitespace character class.
  • * is zero-or-more repetition of.

In multiline mode, ^ and $ also match the beginning and end of the line.

References:

  • regular-expressions.info/Anchors, Character Classes, and Repetition.

A non-regex alternative:

You can also check if a given string line is «blank» (i.e. containing only whitespaces) by trim()-ing it, then checking if the resulting string isEmpty().

In Java, this would be something like this:

if (line.trim().isEmpty()) {
    // line is "blank"
}

The regex solution can also be simplified without anchors (because of how matches is defined in Java) as follows:

if (line.matches("\s*")) {
    // line is "blank"
}

API references

  • String String.trim()
    • Returns a copy of the string, with leading and trailing whitespace omitted.
  • boolean String.isEmpty()
    • Returns true if, and only if, length() is 0.
  • boolean String.matches(String regex)
    • Tells whether or not this (entire) string matches the given regular expression.

Elliot Huffman's user avatar

answered Jun 10, 2010 at 8:35

polygenelubricants's user avatar

3

Actually in multiline mode a more correct answer is this:

/(^(rn|n|r)$)|(^(rn|n|r))|^s*$/gm

The accepted answer: ^s*$ does not match a scenario when the last line is blank (in multiline mode).

Edit: added a ^ toward the beginning to catch the case of lines ending with */ followed by a new line. Thanks John Henry.

answered Sep 1, 2016 at 23:45

Bill Christo's user avatar

5

answered Jun 10, 2010 at 8:32

Marcelo Cantos's user avatar

Marcelo CantosMarcelo Cantos

180k38 gold badges325 silver badges364 bronze badges

1

Full credit to bchr02 for this answer. However, I had to modify it a bit to catch the scenario for lines that have */ (end of comment) followed by an empty line. The regex was matching the non empty line with */.

New: (^(rn|n|r)$)|(^(rn|n|r))|^s*$/gm

All I did is add ^ as second character to signify the start of line.

answered Oct 10, 2017 at 7:12

John Henry's user avatar

John HenryJohn Henry

1833 silver badges10 bronze badges

2

The most portable regex would be ^[ tn]*$ to match an empty string (note that you would need to replace t and n with tab and newline accordingly) and [^ nt] to match a non-whitespace string.

answered Jun 10, 2010 at 8:34

soulmerge's user avatar

soulmergesoulmerge

73.3k19 gold badges118 silver badges154 bronze badges

2

Here Blank mean what you are meaning.
A line contains full of whitespaces or a line contains nothing.
If you want to match a line which contains nothing then use ‘/^$/’.

answered Jun 10, 2010 at 8:37

kiruthika's user avatar

kiruthikakiruthika

2,1557 gold badges26 silver badges33 bronze badges

1

Somehow none of the answers from here worked for me when I had strings which were filled just with spaces and occasionally strings having no content (just the line terminator), so I used this instead:

if (str.trim().isEmpty()) {
    doSomethingWhenWhiteSpace();
}

answered Dec 5, 2022 at 12:17

Valerij Dobler's user avatar

Well…I tinkered around (using notepadd++) and this is the solution I found

ns

n for end of line (where you start matching) — the caret would not be of help in my case as the beginning of the row is a string
s takes any space till the next string

hope it helps

answered Aug 31, 2017 at 8:31

M_TRONIC's user avatar

4

This regex will delete all empty spaces (blank) and empty lines and empty tabs from file

ns*

answered Apr 4, 2022 at 14:16

Just Me's user avatar

Just MeJust Me

7672 gold badges17 silver badges28 bronze badges

2

I use a validator that requires a regex to be specified. In the case of validating against an empty string, I don’t know how to generate such a regex. What regex can I use to match the empty string?

Paul Bellora's user avatar

Paul Bellora

54.1k18 gold badges129 silver badges181 bronze badges

asked Jul 2, 2010 at 9:14

prabha's user avatar

3

The regex ^$ matches only empty strings (i.e. strings of length 0). Here ^ and $ are the beginning and end of the string anchors, respectively.

If you need to check if a string contains only whitespaces, you can use ^s*$. Note that s is the shorthand for the whitespace character class.

Finally, in Java, matches attempts to match against the entire string, so you can omit the anchors should you choose to.

References

  • regular-expressions.info/Character classes and Anchors

API references

  • String.matches, Pattern.matches and Matcher.matches

Non-regex solution

You can also use String.isEmpty() to check if a string has length 0. If you want to see if a string contains only whitespace characters, then you can trim() it first and then check if it’s isEmpty().

answered Jul 2, 2010 at 9:16

polygenelubricants's user avatar

1

I don’t know about Java specifically, but ^$ usually works (^ matches only at the start of the string, $ only at the end).

answered Jul 2, 2010 at 9:16

Chowlett's user avatar

ChowlettChowlett

45.7k19 gold badges116 silver badges150 bronze badges

If you have to use regexp in Java for checking empty string you can simply use

testString.matches("")

please see examples:

 String testString = "";
 System.out.println(testString.matches(""));

or for checking if only white-spaces:

String testString = "  ";        
testString.trim().matches("");

but anyway using

testString.isEmpty();
testString.trim().isEmpty();

should be better from performance perspective.

   public static void main(String[] args) {

        String testString = "";

        long startTime = System.currentTimeMillis();
        for (int i =1; i <100000000; i++) {

            // 50% of testStrings are empty.
            if ((int)Math.round( Math.random()) == 0) {
                testString = "";
            } else {
                testString = "abcd";
            }

             if (!testString.isEmpty()){
                testString.matches("");
            }

        }
        long endTime = System.currentTimeMillis();


        System.out.println("Total testString.empty() execution time: " + (endTime-startTime) + "ms");


        startTime = System.currentTimeMillis();

        for (int i =1; i <100000000; i++) {
            // 50% of testStrings are empty.
            if ((int)Math.round( Math.random()) == 0) {
                testString = "";
            } else {
                testString = "abcd";
            }

            testString.matches("");


        }

        endTime = System.currentTimeMillis();

        System.out.println("Total testString.matches execution time: " + (endTime-startTime) + "ms");

    }

Output:

C:Javajdk1.8.0_221binjava.exe 
Total testString.empty() execution time: 11023ms
Total testString.matches execution time: 17831ms

answered Jun 24, 2019 at 15:57

David Abragimov's user avatar

David AbragimovDavid Abragimov

5092 gold badges6 silver badges21 bronze badges

2

For checking empty string i guess there is no need of regex itself…
u Can check length of the string directly ..

in many cases empty string and null checked together for extra precision.

like String.length >0 && String != null

answered Jul 2, 2010 at 11:44

neo_r23's user avatar

Как регуляркой проверять на пустоту?

Как регуляркой проверять на пустоту?


  • Вопрос задан

    более трёх лет назад

  • 2212 просмотров

Регулярка: /^$/

Пример:

var str1 = "";
var str2 = "qwerty";
var re=/^$/;

console.log( re.test(str1) ); // true
console.log( re.test(str2) ); // false

Пригласить эксперта

Смотря что считать пустотой.
Если это все пробельные символы, то примерно так: ^s*$
(Расшифровывается, как любое количество пробельных символов, даже нулевое, от начала и до конца строки).


  • Показать ещё
    Загружается…

25 мая 2023, в 20:52

2500 руб./за проект

25 мая 2023, в 20:48

1800 руб./за проект

25 мая 2023, в 20:19

2500 руб./за проект

Минуточку внимания

  English Русский Deutsch Български Français Español

Вступление¶

Регулярные выражения — удобный способ описывать шаблоны текстов.

С помощью регулярных выражений вы можете проверять пользовательский ввод, искать некоторые шаблоны, такие как электронные письма телефонных номеров на веб-страницах или в некоторых документах и так далее.

Ниже приведена исчерпывающая шпаргалка по регулярных выражениям всего на одной странице.

Символы¶

Простые совпадения¶

Серия символов соответствует этой серии символов во входной строке.

RegEx Находит
foobar foobar

Непечатные символы (escape-коды)¶

Для представления непечатаемого символа в регулярном выражении используется x с шестнадцатеричным кодом. Если код длиннее 2 цифр (более U+00FF), то он обрамляется в фигурные скобки.

RegEx Находит
xAB символ с 2-значным шестнадцатеричным кодом AB
x{AB20} символ с 1-4 значным шестнадцатеричным кодом AB20
foox20bar foo bar (обратите внимание на пробел в середине)

Существует ряд предопределенных escape-кодов для непечатных символов, как в языке C:

RegEx Находит
t tab (HT/TAB), тоже что x09
n символ новой строки (LF), то же что x0a
r возврат каретки (CR), тоже что x0d
f form feed (FF), то же что x0c
a звонок (BEL), тоже что x07
e escape (ESC), то же что x1b
cAcZ

chr(0) по chr(25).

Например cI соответствует табуляции.

Также поддерживаются буквы в нижнем регистре «a»…»z».

Эскейпинг¶

Для представления спецсимволов (.+*?|()[]{}^$), перед ними надо поставить . Чтобы вставить сам обратный слэш его надо удвоить.

RegEx Находит
^FooBarPtr ^FooBarPtr здесь ^ не означает начало строки
[a] [a] это не класс символов

Классы символов¶

Пользовательские классы¶

Символьный класс — это список символов внутри []. Класс соответствует любому одному символу, указанному в этом классе.

RegEx Находит
foob[aeiou]r foobar, foober и т. д., но не foobbr, foobcr и т. д.

Вы можете инвертировать класс — если первый символ после [ является ^, то класс соответствует любому символу, кроме символов, перечисленных в классе.

RegEx Находит
foob[^aeiou]r foobbr, foobcr и т. д., но не foobar, foober и т. д.

Внутри списка символ - используется для указания диапазона, так что a-z представляет все символы между a и z включительно.

Если вы хотите, чтобы - сам был членом класса, поместите его в начало или конец списка или предварите его обратной косой чертой (escape).

Если вы хотите буквально использовать символ ] поместите его в начало списка или escape обратной косой чертой.

RegEx Находит
[-az] a, z и -
[az-] a, z и -
[А-z] a, z и -
[a-z] символы от a до z
[n-x0D] символы от #10 до #13

Разделители¶

Разделители строк¶

Метасимвол Находит
. любой символ в строке, может включать разделители строк
^ совпадение нулевой длины в начале строки
$ совпадение нулевой длины в конце строки
A совпадение нулевой длины в начале строки
z совпадение нулевой длины в конце строки
Z похож на z но совпадает перед разделителем строки, а не сразу после него, как z

Примеры:

RegEx Находит
^foobar foobar только если он находится в начале строки
foobar$ foobar, только если он в конце строки
^foobar$ foobar только если это единственная строка в строке
foob.r foobar, foobbr, foob1r и так далее

Метасимвол ^ совпадает с точкой начала строки (нулевой длины). $ — в конце строки. Если включен modifier /m , они совпадают с началами или концами строк внутри текста.

Обратите внимание, что в последовательности x0Dx0A нет пустой строки.

Примечание

TRegExpr

Если вы используете Unicode версию, то ^/$ также соответствует x2028, x2029, x0B, x0C или x85.

Метасимвол A совпадает с точкой нулевой длины в начале строки, z — в конце (после символов завершения строки). Модификатор modifier /m на них не влияет. Z тоже самое что z но совпадает с точкой перед символами завершения строки (LF and CR LF).

Метасимвол . по умолчанию соответствует любому символу, но если вы выключите modifier /s, то . не будет совпадать с разделителями строк внутри строки.

Обратите внимание, что выражение ^.*$ не соответствует точке между x0Dx0A, потому что это неразрывный разделитель строк. Но оно соответствует пустой строке в последовательности x0Ax0D, поэтому из-за неправильного порядка кодов он не воспринимается как разделитель строк и считается просто двумя символами.

Примечание

TRegExpr

Многострочная обработка может быть настроена с помощью свойств LineSeparators и LinePairedSeparator.

Таким образом, вы можете использовать разделители стиля Unix n или стиль DOS / Windows rn или смешивать их вместе (как описано выше по умолчанию).

Если вы предпочитаете математически правильное описание, вы можете найти его на сайте www.unicode.org.

Разделители слов¶

RegEx Находит
b разделитель слов
B разделитель с не-словом

Граница слова b — это точка между двумя символами, у которой w с одной стороны от нее и W с другой стороны (в любом порядке).

Повторы¶

Повтор¶

За любым элементом регулярного выражения может следовать допустимое число повторений элемента.

RegEx Находит
{n} ровно n раз
{n,} по крайней мере n раз
{n,m} по крайней мере n, но не более чем m раз
* ноль или более, аналогично {0,}
+ один или несколько, похожие на {1,}
? ноль или единица, похожая на {0,1}

То есть цифры в фигурных скобках {n,m} определяются минимальное n и максимальное m количество повторов (совпадений во входном тексте).

{n} эквивалентно {n,n} и означает точно n раз. {n,} совпадает n или более раз.

Теоретически значение n и m не ограничены (можно использовать максимальное значение для 32-х битного числа).

RegEx Находит
foob.*r foobar, foobalkjdflkj9r и foobr
foob.+r foobar, foobalkjdflkj9r, но не foobr
foob.?r foobar, foobbr и foobr, но не foobalkj9r
fooba{2}r foobaar
fooba{2}r foobaar, foobaaar, foobaaaar и т. д.
fooba{2,3}r foobaar, или foobaaar, но не foobaaaar
(foobar){8,10} 8, 9 или 10 экземпляров foobar (() это Группа)

Жадность¶

Повторы в жадном режиме захватывают как можно больше из входного текста, в не жадном режиме — как можно меньше.

По умолчанию все повторы являются жадными. Используйте ? Чтобы сделать любой повтор не жадным.

Для строки abbbbc:

RegEx Находит
b+ bbbb
Ь+? b
b*? пустую строку
b{2,3}? bb
b{2,3} bbb

Вы можете переключить все повторы в не жадный режим (modifier /g, ниже мы используем in-line модификатор change).

RegEx Находит
(?-g)Ь+ b

Сверхжадные повторы (Possessive Quantifier)¶

Синтаксис: a++, a*+, a?+, a{2,4}+. В настоящее время реализован только для простых групп и не будет работать для сложны, как например (foo|bar){3,5}+.

Полное описание (на английском) Вкратце, сверхжадный повтор ускоряет работу в сложных случаях.

Альтернативы¶

Выражения в списке альтернатив разделяются |.

Таким образом, fee|fie|foe будет соответствовать любому из fee, fie или foe (также как и f(e|i|o)e).

Первое выражение включает в себя все от последнего разделителя шаблона ((, [ или начало шаблона) до первого |, а последнее выражение содержит все от последнего | к следующему разделителю шаблона.

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

Выражения в списке альтернатив пробуются слева направо, принимается первое же совпадение.

Например, регулярное выражение foo|foot в строке barefoot будет соответствовать foo — первое же совпадение.

Также помните, что | в квадратных скобках воспринимается просто как символ, поэтому, если вы напишите [fee|fie|foe], это тоже самое что [feio|].

RegEx Находит
foo(bar|foo) foobar или foofoo

Группы (подвыражения)¶

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

Подвыражения нумеруются слева направо по открывающим их скобкам (включая вложенные группы (подвыражения). У первой группы номер 1. У выражения в целом — 0.

Например, для входной строки foobar регулярное выражение (foo(bar)) найдет:

Группы (подвыражения) значение
0 foobar
1 foobar
2 bar

Ссылки на группы (Backreferences)¶

Метасимволы от 1 до 9 интерпретируются как ссылки на группы. Они соответствуют ранее найденной группе с соответствующим индексом..

RegEx Находит
(.)1+ aaaa и cc
(.+)1+ также abab и 123123

(['"]?)(d+)1 соответствует "13" (в двойных кавычках) или '4' (в одинарных кавычках) или 77 (без кавычек) и т. д.

Именованные группы (подвыражения) и ссылки на них¶

Чтобы присвоить имя группе используйте (?P<name>expr) или (?'name'expr).

Имя группы должно начинаться с буквы или _, далее следуют буквы, цифры или _. Именованные и не именованные группы имеют общую нумерацию от 1 до 9.

Чтобы сослаться на именованную группу используйте (?P=name). Или, как и для не именованных, цифры от 1 до 9.

RegEx Находит
(?P<qq>['"])w+(?P=qq) "word" и 'word'

Модификаторы¶

Модификаторы предназначены для изменения поведения регулярных выражений.

Вы можете установить модификаторы глобально в вашей системе или изменить их внутри регулярного выражения, используя (?imsxr-imsxr).

Примечание

TRegExpr

Для изменения модификаторов используйте ModifierStr или соответствующие TRegExpr свойства Модификатор *.

Значения по умолчанию определены в глобальных переменных. Скажем, глобальная переменная RegExprModifierX определяет значение по умолчанию для свойства ModifierX.

i, без учета регистра¶

Регистро-независимые сравнения. Использует установленные в вашей системе языковые настройки, см. также InvertCase.

m, многострочные строки¶

Обрабатывать строку как несколько строк. Таким образом, ^ и $ соответствуют началу или концу любой строки в любом месте строки.

Смотрите также Разделители строк.

s, одиночные строки¶

Обрабатывать строку как одну строку. Так что . соответствует любому символу, даже разделителям строк.

Смотрите также Разделители строк, которые обычно не совпадают.

г, жадность¶

Примечание

Специфичный для TRegExpr модификатор.

Отключив его Off, вы переключите повторитель в не-жадный режим.

Итак, если модификатор /g имеет значение Off, то + работает как +?, * как *? и так далее.

По умолчанию этот модификатор имеет значение Выкл.

x, расширенный синтаксис¶

Позволяет комментировать регулярные выражения и разбивать их на несколько строк.

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

Также символ # отделяет комментарии.

Обратите внимание, что вы можете использовать пустые строки для форматирования регулярного выражения для лучшей читаемости:

(
(abc) # комментарий 1
#
(efg) # комментарий 2
)

Это также означает, что если вам нужно вставить пробел или символ # в шаблон (вне класса символов, где они не затрагиваются /x), вам придется либо эскейпить их, либо кодировать, используя шестнадцатеричный код.

г, русские диапазоны¶

Примечание

Специфичный для TRegExpr модификатор.

В русской таблице ASCII символы ё / Ё размещаются отдельно от других.

Большие и маленькие русские символы находятся в отдельных диапазонах, это не отличается от ситуации с английскими символами, но, тем не менее, я хотел иметь краткую форму.

С этим модификатором вместо [а-яА-ЯёЁ] вы можете написать [а-Я], если вам нужны все русские символы.

Когда модификатор включен:

RegEx Находит
а-я символы от а до я и ё
А-Я символы от А до Я и Ё
а-Я все русские символы

Модификатор по умолчанию установлен на Вкл.

Проверки или заглядывания вперед и назад (Assertions)¶

Заглядывание вперед (lookahead assertion) foo(?=bar) совпадает «foo» только перед «bar», при этом сама строка «bar» не войдет в найденный текст.

Отрицательное заглядывание вперед (negative lookahead assertion): foo(?!bar) совпадает «foo» только если после этой строки не следует «bar».

Ретроспективная проверка (lookbehind assertion): (?<=foo)bar совпадает «bar» только после «foo», при этом сама строка «foo» не войдет в найденный текст.

Отрицательное заглядывание назад (negative lookbehind assertion): foo(?!bar) совпадает «bar» только если перед этой строкой нет «foo».

Ограничения:

  • Скобки для заглядываний вперед должны быть в самом начале выражения. Не поддерживаются заглядывания внутри альтернатив (|) или групп.
  • Для заглядывания назад (?<!foo)bar, выражение «foo» должно быть фиксированной длины. Допустимы повторы только с фиксированным числом {n} или {n,n}. Разрешено использование классов символов и точки. Не разрешены группы и альтернативы.
  • Для остальных трех типов заглядываний, выражение в скобках может быть сколь угодно сложным.

Не захватываемые группы (подвыражения)¶

Синтаксис: (?:subexpression).

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

RegEx Находит
(https?|ftp)://([^/rn]+) в https://sorokin.engineer захватит подвыражения https и sorokin.engineer
(?:https?|ftp)://([^/rn]+) в https://sorokin.engineer захватит только sorokin.engineer

Атомарные группы¶

Синтаксис: (?>expr|expr|...).

Атомарные группы это специальный случай незахватывающих групп. Подробнее

Модификаторы¶

Синтаксис для одного модификатора: (?i) чтобы включить, и (?-i) чтобы выключить. Для большого числа модификаторов используется синтаксис: (?msgxr-imsgxr).

Можно использовать внутри регулярного выражения. Это может быть особенно удобно, поскольку оно имеет локальную область видимости. Оно влияет только на ту часть регулярного выражения, которая следует за оператором (?imsgxr-imsgxr).

И если оно находится внутри подвыражения, оно будет влиять только на это подвыражение, а именно на ту часть подвыражения, которая следует за оператором. Таким образом, в ((?i)Saint)-Petersburg это влияет только на подвыражение ((?i)Saint), поэтому оно будет соответствовать saint-Petersburg, но не saint-petersburg.

RegEx Находит
(?i)Saint-Petersburg Saint-petersburg и Saint-Petersburg
(?i)Saint-(?-i)Petersburg Saint-Petersburg, но не Saint-petersburg
(?i)(Saint-)?Petersburg Saint-petersburg и saint-petersburg
((?i)Saint-)?Petersburg saint-Petersburg, но не saint-petersburg

Рекурсия¶

Синтаксис (?R), синоним (?0).

Выражение a(?R)?z совпадает с одним или более символом «a» за которым следует точно такое же число символов «z».

Основное назначение рекурсии — сбалансировать обрамление вложенного текста. Общий вид b(?:m|(?R))*e где «b» это то что начинает обрамляемый текст, «m» это собственно текст, и «e» это то, что завершает обрамление.

Если же обрамляемый текст также может встречаться без обрамления то выражение будет b(?R)*e|m.

Вызовы подвыражений¶

Нумерованные группы (подвыражения) обозначают (?1)(?90) (максимальное число групп определяется константой в TRegExpr).

Синтаксис для именованных групп : (?P>name). Поддерживается также Perl вариант синтаксиса: (?&name).

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

Unicode категории (category)¶

В стандарте Unicode есть именованные категории символов (Unicode category). Категория обозначается одной буквой, и еще одна добавляется, чтобы указать подкатегорию. Например «L» это буква в любом регистре, «Lu» — буквы в верхнем регистре, «Ll» — в нижнем.

  • Cc — Control
  • Cf — Формат
  • Co — Частное использование
  • Cs — Заменитель (Surrrogate)
  • Ll — Буква нижнего регистра
  • Lm — Буква-модификатор
  • Lo — Прочие буквы
  • Lt — Titlecase Letter
  • Lu — Буква в верхнем регистре
  • Mc — Разделитель
  • Me — Закрывающий знак (Enclosing Mark)
  • Mn — Несамостоятельный символ, как умляут над буквой (Nonspacing Mark)
  • Nd — Десятичная цифра
  • Nl — Буквенная цифра — например, китайская, римская, руническая и т.д. (Letter Number)
  • No — Другие цифры
  • Pc — Connector Punctuation
  • Pd — Dash Punctuation
  • Pe — Close Punctuation
  • Pf — Final Punctuation
  • Pi — Initial Punctuation
  • Po — Other Punctuation
  • Ps — Open Punctuation
  • Sc — Currency Symbol
  • Sk — Modifier Symbol
  • Sm — Математический символ
  • So — Прочие символы
  • Zl — Разделитель строк
  • Zp — Разделитель параграфов
  • Zs — Space Separator

Meta-character p denotes one Unicode char of specified category. Syntax: pL and p{L} for 1-letter name, p{Lu} for 2-letter names.

Метасимвол P это символ не из Unicode категории (category).

These meta-characters are supported within character classes too.

В данной статье рассматривается практическое применение регулярных выражений в Notepad++. Сначала будет кратко рассмотрена общая теория: как включить поиск по регулярному выражению, какой символ за что отвечает, в каких случаях без регулярных выражений не обойтись. Далее будут рассмотрены конкретные ситуации из жизни автора, когда поиск по регулярному выражению оказался прямо-таки спасением ситуации и значительно сэкономил время на рутинные операции.

Итак, перейдем сразу к делу: Как включить поиск по регулярному выражению в notepad++? К счастью, тут все просто. Нужно нажать ctrl + F (как и для обычного поиска) и во всплывшем окне переключиться в режим «регулярное выражение» (см. скриншот ниже).

После этого простого действия, можно в строку «найти» вписывать шаблоны для поиска. Данные шаблоны строятся из набора определенных спецсимволов, которые, для удобства восприятия, разбиты по пунктам:

  1. ^ — Символ начала строки
  2. $ — Символ конца строки
  3. . (Точка) — один любой символ
  4. [0-9] — любая цифра
  5. [a-z] — любой символ латинского алфавита в нижнем регистре
  6. [A-Z] — любой символ латинского алфавита в верхнем регистре
  7. [a-zA-Z] и (эквивалент) [a-Z] — любой символ латинского алфавита в любой регистре
  8. s — символ пробела
  9. S — (обратно предыдущему) не пробел
  10. w — любая цифра, буква или подчеркивание
  11. d — любая цифра
  12. D — (обратно предыдущему) любой символ, но не цифра
  13. * — Повтор предыдущего символа. То есть символ перед звездочкой может повторяться 0 и более раз. Например: .* — представляет собой абсолютно любой набор символов
  14. n — символ новой строки

В принципе, приведенных спецсимволов достаточно для того, чтобы начинать писать шаблоны для поиска по регулярному выражению. Но, для начала, рассмотрим в каких ситуациях может возникнуть надобность писать данные регулярные выражения.

Надобность в в применении регулярных выражений может возникнуть тогда, когда нужно обработать большой массив текстовой информации для того, чтобы найти схожие, но не идентичные фрагменты текста. Например: очистить текст от html-тегов, удалить простейший числовой ряд (на каждой строке до или после текста работает «счетчик», в котором число возрастает на +1), приведение дат к единому формату и тому подобные ситуации. Как ни странно, необходимость прибегнуть к регулярным выражениям может возникнуть не только у программиста, но и у маркетолога, например если требуется «выдернуть» какую-либо информацию из xml-фида данных.

Итак, рабочие ситуации:

Как удалить  tррabs с разными url?
tppabs — это специфический атрибут, который добавляет «программа-грабилка» teleport pro при «скачивании» какого-либо сайта. В коде страницы атрибут выглядит следующим образом: tppabs=»http://example.ru/img/112″
Для удаления таких тегов подойдет следующее регулярное выражение:
tppabs=»(.+?)»
Заменить на пустое значение (или пробел, в зависимости от ситуации).

Как удалить строку с числовой последовательностью?
Есть большой массив данных, каждая строка в которой начинается с текста «Line (1…100000):
Цель — удалить эти символы и не трогать остальные данные. Такая ситуация может возникнуть, когда был сделан поиск в Notepad++ по большому файлу, а далее результаты были скопированы в новый файл. Естественно, от этих Line следует избавиться как можно скорее.
Для этого подойдет следующее регулярное выражение:  .*Line.[0-9]*: (.* Добавлены на случай, если перед Line стоят символы табуляции, что очень вероятно).

Как обернуть в кавычки текст на каждой строке?
Например, есть большой массив ключевых слов. Каждая ключевая фраза расположена на отдельной строке и каждую ключевую фразу нужно обернуть в кавычки. Для этого подойдет следующее регулярное выражение: ^(.*)$
Стоит учесть:  в строке «Заменить на» надо написать следующее: «1» (1 в данном случае возвращенное поиском значение, уникальное для каждой строки, если написать в «заменить на» — «^(.*)$» (именно в кавычках, то все строки заменятся именно на «^(.*)$»).

Как найти пустые строки с помощью регулярного выражения?
Для этого может подойти одно из двух регулярных выражений:
А) nr  и если не помогает, то:
Б) ^s*$ 

Как заменить один html-тег на другой?
Может возникнуть ситуация, когда определенные теги, которыми обернут текст, нужно заменить на другие (например, тег p заменить на div). Для этого подойдет следующее регулярное выражение: <span>(.*)</span> и соответственно,  в «заменить на» нужно прописать: <div>1</div>

Как удалить всё после определенного символа?
Пример получился довольно отвлеченный: В файле нужно удалить в каждой строке все символы, которые идут после слова php (К слову, может пригодиться, если нужно удалить utm-метки из массива url). Для этого подойдет выражение следующего формата:
(.*)php(.*) и в «заменить на» указать 1

Вот, собственно, и все. В статье были рассмотрены случаи, с которыми автор сталкивался более одного раза и применение регулярных выражений помогло в таких ситуациях сэкономить уйму времени. Конечно, применение регулярных выражений (даже если рассматривать их в контексте Notepad++) не ограничивается только вышеприведенными примерами, тема эта довольно объемная и интересная, но общий принцип можно описать следующими словами:

Обработка больших объемов текстовых данных по определенному шаблону для экономии времени

Понравилась статья? Поделить с друзьями:
  • Как найти корень в слове солнце
  • Перекошена балконная пластиковая дверь как исправить
  • Как найти цену дешевле
  • Как найти количество интервалов в выборке
  • Веб камера не работает на windows 10 как исправить