How do I make an expression to match absolutely anything (including whitespaces)? Example:
Regex: I bought _____ sheep.
Matches: I bought sheep. I bought a sheep. I bought five sheep.
I tried using (.*)
, but that doesn't seem to be working.
.*
should work. Can you paste your actual code?
I bought sheep
is wrong and I bought sheep
is correct.
(?s:.)
- the inline modifier group match any char including line break chars. In your case, it would be something like this: (?s:.*?)
. Taken from the answer by Wiktor Stribiżew.
Normally the dot matches any character except newlines.
So if .*
isn't working, set the "dot matches newlines, too" option (or use (?s).*
).
If you're using JavaScript, which doesn't have a "dotall" option, try [\s\S]*
. This means "match any number of characters that are either whitespace or non-whitespace" - effectively "match any string".
Another option that only works for JavaScript (and is not recognized by any other regex flavor) is [^]*
which also matches any string. But [\s\S]*
seems to be more widely used, perhaps because it's more portable.
(.*?)
matches anything - I've been using it for years.
("title":".*?")
[\s\S]*
or [^]*
.
w+
isn't enough, I end up using .+
. Luckily hasn't come back to bite me yet.
Choose & memorize 1 of the following!!! :)
[\s\S]*
[\w\W]*
[\d\D]*
Explanation:
\s
: whitespace \S
: not whitespace
\w
: word \W
: not word
\d
: digit \D
: not digit
(You can exchange the *
for +
if you want 1 or MORE characters [instead of 0 or more]).
BONUS EDIT:
If you want to match everything on a single line, you can use this:
[^\n]+
Explanation:
^
: not
\n
: linebreak
+
: for 1 character or more
Try this:
I bought (.* )?sheep
or even
I bought .*sheep
/.*/
works great if there are no line breaks. If it has to match line breaks, here are some solutions:
Solution Description /.*/s /s (dot all flag) makes . (wildcard character) match anything, including line breaks. Throw in an * (asterisk), and it will match everything. Read more. /[\s\S]*/ \s (whitespace metacharacter) will match any whitespace character (space; tab; line break; ...), and \S (opposite of \s) will match anything that is not a whitespace character. * (asterisk) will match all occurrences of the character set (Encapsulated by []). Read more.
*
with +
.
/[\s\S]*/
works to me to match anything ignore break lines
Because .
Find a single character, except newline or line terminator.
So, to match anything, You can use like this: (.|\n)*?
Hope it helps!
?
makes the preceding quantifier lazy, causing it to match as few characters as possible (in the case, zero!)
\n
) line endings, but not CR (\r
) or CRLF (\r\n
) line endings.
Use .*
, and make sure you are using your implementations' equivalent of single-line so you will match on line endings.
There is a great explanation here -> http://www.regular-expressions.info/dot.html
If you're using JavaScript, ES2018 added the /s
(dotAll) flag. With the /s
flag, the dot .
will match any character, including a newline.
console.log("line_1\nline_2".match(/.+/s))
Note: It's not supported by all browsers yet.
(.*?)
does not work for me. I am trying to match comments surrounded by /* */
, which may contain multiple lines.
Try this:
([a]|[^a])
This regex matches a
or anything else expect a
. Absolutely, it means matching everything.
BTW, in my situation, /\*([a]|[^a])*/
matches C style comments.
Thank @mpen for a more concise way.
[\s\S]
[\s\S]
-- i.e. match spaces and non-spaces.
For JavaScript the best and simplest answer would seem to be /.\*/
.
As suggested by others /(.*?)/
would work as well but /.\*/
is simpler. The ()
inside the pattern are not needed, as far as I can see nor the ending ?
to match absolutely anything (including empty strings)
NON-SOLUTIONS:
/[\s\S]/ does NOT match empty strings so it's not the solution.
/[\s\S]\*/ DOES match also empty strings. But it has a problem: If you use it in your code then you can't comment out such code because the */ is interpreted as end-of-comment.
/([\s\S]\*)/
works and does not have the comment-problem. But it is longer and more complicated to understand than /.*/
.
The 2018 specification provides the s flag (alias: dotAll), so that .
will match any character, including linebreaks:
const regExAll = /.*/s; //notice the 's' let str = ` Everything in this string will be matched. Including whitespace (even Linebreaks). `; console.log(`Match:`, regExAll.test(str)); //true console.log(`Index Location:`, str.search(regExAll)); let newStr = str.replace(regExAll,"🐔"); console.log(`Replaced with:`,newStr); //Index: 0
Regex: /I bought.*sheep./ Matches - the whole string till the end of line I bought sheep. I bought a sheep. I bought five sheep. Regex: /I bought(.*)sheep./ Matches - the whole string and also capture the sub string within () for further use I bought sheep. I bought a sheep. I bought five sheep. I boughtsheep. I bought a sheep. I bought fivesheep. Example using Javascript/Regex 'I bought sheep. I bought a sheep. I bought five sheep.'.match(/I bought(.*)sheep./)[0]; Output: "I bought sheep. I bought a sheep. I bought five sheep." 'I bought sheep. I bought a sheep. I bought five sheep.'.match(/I bought(.*)sheep./)[1]; Output: " sheep. I bought a sheep. I bought five "
<?php
$str = "I bought _ sheep";
preg_match("/I bought (.*?) sheep", $str, $match);
print_r($match);
?>
http://sandbox.phpcode.eu/g/b2243.php
I recommend use /(?=.*...)/g
Example
const text1 = 'I am using regex';
/(?=.*regex)/g.test(text1) // true
const text2 = 'regex is awesome';
/(?=.*regex)/g.test(text2) // true
const text3 = 'regex is util';
/(?=.*util)(?=.*regex)/g.test(text3) // true
const text4 = 'util is necessary';
/(?=.*util)(?=.*regex)/g.test(text4) // false because need regex in text
Use regex101 to test
Honestly alot of the answers are old so i found that if you simply just test any string regardless of character content with "/.*/i" will sufficiently get EVERYTHING.
/.*/i
will not match line breaks. Further, /i
(the ‘ignore case’ flag) is redundant. 😉
I use this: (.|\n)+ works like a charm for me!
Success story sharing
.*
doesn't match\n
but it maches a string that contains only\n
because it matches 0 character.(?s).*
works for me matched everything including new line*
(as in/.*(?:)/
) or using the regex constructor (var foo = new RegExp(".*")
).