我如何使一个表达式匹配绝对任何东西(包括空白)?例子:

Regex:我买了_____羊。

火柴:我买了羊。我买了一只羊。我买了五只羊。

我尝试使用(.*),但似乎没有工作。


当前回答

(.*?)不适合我。我试图匹配注释周围的/* */,其中可能包含多行。

试试这个:

([a]|[^a])

这个正则表达式匹配a或除a之外的任何东西,当然,它意味着匹配所有东西。

顺便说一句,在我的情况下,/\*([a]|[^a])*/匹配C风格的注释。

感谢@mpen提供了一个更简洁的方式。

[\s\S]

其他回答

对于JavaScript,最好和最简单的答案似乎是/.\*/。

正如其他人所建议的/(.*?)/也可以,但是/。\*/更简单。()里面的图案是不需要的,就我所见也没有结局?匹配任何内容(包括空字符串)


的办法:

/[\s\ s]/不匹配空字符串,因此不是解决方案。 /[\s\ s]\*/ DOES也匹配空字符串。但它有一个问题:如果你在代码中使用它,那么你就不能注释掉这样的代码,因为*/被解释为注释结束。

/([\s\ s]\*)/可以工作并且不存在注释问题。但是它比/.*/要长,理解起来也更复杂。

/。如果没有换行符,*/效果很好。如果它必须匹配换行符,这里有一些解决方案:

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.
<?php
$str = "I bought _ sheep";
preg_match("/I bought (.*?) sheep", $str, $match);
print_r($match);
?>

http://sandbox.phpcode.eu/g/b2243.php

如果你使用JavaScript, ES2018添加了/s (dotAll)标志。带有/s标志的点。将匹配任何字符,包括换行符。

游戏机log(“line_1 \ nline_2”。match (/ + / s))

注意:目前还不是所有浏览器都支持它。

(.*?)匹配任何东西-我已经使用它很多年了。