Andrea Silvestri
Andrea Silvestri

Reputation: 1134

Notepad++ multiline regex

I've got hundreds of files of the type linked here: http://pastebin.com/fGgLfZf8

But I want to remove all the comments that occupies more than one line eg.

<!--- MPU ---> 

should be left untouched, while

<!--
************
blablabla
************
-->

should be removed.

I know the Notepad++ feature to lookup through more than a document with regexp and I'm tryin to use it but I have some difficulty. For a start I'm trying this regexp:

<\!\-\-(.*?)\-\->

which tested in here: http://www.regextester.com/ works at least partially (because it highlights the comments made of just on line) But if I copy and paste this regexp on Notepad++ it will match just the one-line comments =\

Does anybody know how to do this in Notepad++?

Upvotes: 22

Views: 44638

Answers (5)

Assem
Assem

Reputation: 596

A simple trick if it was a single document, is to convert the line endings to Unix .

Menu: [Edit] -> [EOL Conversion] -> [Unix]

Then just use simple \n to detect newline in your expression.

This way you don't have to change expressions constructed/copied from some online regex builders.

note: don't forget to switch line endings back to Windows, just in case.

Upvotes: 0

Igor Aleksandrov
Igor Aleksandrov

Reputation: 21

Another way to catch multi-line text is use the expression:

<!---([\S\s]+?)--->

\S+ matches all no-space symbols,
\s+ matches all space symbols (including \r \n \t).

It works for notepad++, maybe, otherwise too...

EDIT: At the first look I didn’t noticed that problem issue is catch and delete only multiline comments excluding monoline ones. I found method of two iterations. First we need to find and replace by nothing following text

<!—-(?:(?!.*—->)[\s\S]+?—->|)

That will catch all multiline comments and prefixes of monoline ones. Then what we need is bring back the monoline prefixes, that we lost:

Find:
(.+—->)

Replace:
<!—-\1

It will fix monoline comments. Combination of “—->“ can not appear xml code otherwise end of comment.

Upvotes: 2

lilwupster
lilwupster

Reputation: 893

Next to the "Regular expression" selection in "Search Mode" there is a "matches newline" checkbox (according to @glatapoui it should be noted that this only works in Notepad++ v6, not in previous versions).

enter image description here

Upvotes: 48

Mike Perrenoud
Mike Perrenoud

Reputation: 67898

This expression <!--.+?(?<=[\*\r\n])--> matched the multi-line comments only in Notepad++ as well.

Upvotes: 4

anthonyme
anthonyme

Reputation: 23

<!--[*a-zA-Z\r\n]*-->

this one seems to only take multi-line comments in notepad++

Edit: little mistake : spaces are a problem with this one. You can try <!--[\r\n]{1}[* a-zA-Z\r\n]*-->

Upvotes: 0

Related Questions