Regex to find two words on the page

If you want the regex to match over several lines I would try:

text1[\w\W]*text2

Using . is not a good choice, because it usually doesn't match over multiple lines. Also, for matching single characters I think using square brackets is more idiomatic than using ( ... | ... )

If you want the match to be order-independent then use this:

(?:text1[\w\W]*text2)|(?:text2[\w\W]*text1)

text0[\s\S]*text1

Try this.This should do it for you.

What this does is match all including multiline .similar to having .*? with s flag.

\s takes care of spaces,newlines,tabs \S takes care any non space character.


If your IDE supports the s (single-line) flag (so the . character can match newlines), you can search for your items with:

(text1).*(text2)|\2.*\1

Example with s flag

If the IDE does not support the s flag, you will need to use [\s\S] in place of .:

(text1)[\s\S]*(text2)|\2[\s\S]*\1

Example with [\s\S]

Some languages use $1 and $2 in place of \1 and \2, so you may need to change that.

EDIT:

Alternately, if you want to simply match that a file contains both strings (but not actually select anything), you can utilize look-aheads:

(?s)^(?=.*?text1)(?=.*?text2)

This doesn't care about the order (or number) of the arguments, and for each additional text that you want to search for, you simply append another (?=.*?text_here). This approach is nice, since you can even include regex instead of just plain strings.