如何使表达式完全匹配任何内容(包括空格)?例子:
正则表达式:我买了_____羊。
火柴:我买了羊。我买了一只羊。我买了五只羊。
我尝试使用 (.*)
,但这似乎不起作用。
.*
应该可以工作。你能粘贴你的实际代码吗?
I bought sheep
是错误的,而 I bought sheep
是正确的。
通常点匹配除换行符以外的任何字符。
因此,如果 .*
不起作用,请设置“点也匹配换行符”选项(或使用 (?s).*
)。
如果您使用的 JavaScript 没有“dotall”选项,请尝试 [\s\S]*
。这意味着“匹配任意数量的空白或非空白字符” - 有效地“匹配任何字符串”。
另一个仅适用于 JavaScript(并且不被任何其他正则表达式风格识别)的选项是 [^]*
,它也匹配任何字符串。但是 [\s\S]*
似乎使用更广泛,可能是因为它更便携。
(.*?)
匹配任何东西 - 我已经使用它多年了。
("title":".*?")
[\s\S]*
或 [^]*
。
w+
还不够,我最终会使用 .+
。幸好还没回来咬我。
选择并记住以下其中一项!!! :)
[\s\S]*
[\w\W]*
[\d\D]*
解释:
\s
:空格 \S
:不是空格
\w
:单词 \W
:不是单词
\d
:数字 \D
:不是数字
(如果您需要 1 个或更多字符 [而不是 0 或更多],您可以将 *
交换为 +
)。
奖金编辑:
如果你想在一行中匹配所有内容,你可以使用这个:
[^\n]+
解释:
^
:不是
\n
:换行符
+
:1 个字符或更多
尝试这个:
I bought (.* )?sheep
甚至
I bought .*sheep
如果没有换行符,/.*/
效果很好。如果它必须匹配换行符,这里有一些解决方案:
解决方案描述 /.*/s /s(点所有标志)使 . (通配符)匹配任何内容,包括换行符。输入 *(星号),它将匹配所有内容。阅读更多。 /[\s\S]*/ \s(空白元字符)将匹配任何空白字符(空格;制表符;换行符;...),而 \S(与 \s 相对)将匹配任何非空白字符特点。 *(星号)将匹配所有出现的字符集(由 [] 封装)。阅读更多。
*
替换为 +
。
/[\s\S]*/
对我有用,可以匹配任何忽略断线的东西
因为 .
查找单个字符,换行符或行终止符除外。
因此,要匹配任何内容,您可以这样使用:(.|\n)*?
希望能帮助到你!
?
使前面的量词变得懒惰,导致它匹配尽可能少的字符(在这种情况下,为零!)
\n
) 行尾,而不适用于 CR (\r
) 或 CRLF (\r\n
) 行尾。
如果您使用的是 JavaScript,ES2018 添加了 /s
(dotAll) 标志。使用 /s
标志,点 .
将匹配任何字符,包括换行符。
console.log("line_1\nline_2".match(/.+/s))
注意:并非所有浏览器都支持它。
(.*?)
对我不起作用。我正在尝试匹配由 /* */
包围的评论,其中可能包含多行。
尝试这个:
([a]|[^a])
此正则表达式匹配 a
或 anything else expect a
。当然,这意味着匹配所有内容。
顺便说一句,在我的情况下,/\*([a]|[^a])*/
匹配 C 风格的评论。
感谢@mpen 提供更简洁的方式。
[\s\S]
[\s\S]
—— 即匹配空格和非空格。
对于 JavaScript,最好和最简单的答案似乎是 /.\*/
。
正如其他人所建议的那样,/(.*?)/
也可以,但 /.\*/
更简单。模式内的 ()
是不需要的,据我所见,结尾的 ?
也不需要完全匹配任何东西(包括空字符串)
非解决方案:
/[\s\S]/ 不匹配空字符串,所以它不是解决方案。
/[\s\S]\*/ 也匹配空字符串。但它有一个问题:如果你在代码中使用它,那么你不能注释掉这样的代码,因为 */ 被解释为注释结束。
/([\s\S]\*)/
有效且没有评论问题。但它比/.*/
更长更复杂。
2018 规范提供了 s flag(别名:dotAll),因此 .
将匹配任何字符,包括换行符:
常量 regExAll = /.*/s; //注意's' let str = ` 这个字符串中的所有内容都将被匹配。包括空格(甚至换行符)。 `; console.log(`匹配:`, regExAll.test(str)); //true console.log(`Index Location:`, str.search(regExAll));让 newStr = str.replace(regExAll,"🐔"); console.log(`替换为:`,newStr); //索引:0
正则表达式:/我买了.*sheep./ 匹配 - 直到行尾的整个字符串我买了羊。我买了一只羊。我买了五只羊。正则表达式:/我买了(。*)羊。/匹配 - 整个字符串,还捕获()中的子字符串以供进一步使用我买了羊。我买了一只羊。我买了五只羊。我买了羊。我买了一只羊。我买了五只羊。使用 Javascript/Regex 的示例 '我买了羊。我买了一只羊。我买了五只羊。'.match(/我买了(.*)sheep./)[0];输出:“我买了羊。我买了一只羊。我买了五只羊。” “我买了羊。我买了一只羊。我买了五只羊。'.match(/我买了(.*)sheep./)[1];输出:“羊。我买了一只羊。我买了五只”
<?php
$str = "I bought _ sheep";
preg_match("/I bought (.*?) sheep", $str, $match);
print_r($match);
?>
http://sandbox.phpcode.eu/g/b2243.php
我建议使用 /(?=.*...)/g
例子
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
使用 regex101 进行测试
老实说,很多答案都是旧的,所以我发现如果你只是简单地测试任何字符串,而不管字符内容如何,“/.*/i”就足以得到一切。
/.*/i
将不匹配换行符。此外,/i
(“忽略大小写”标志)是多余的。 😉
我用这个: (.|\n)+ 对我来说就像一个魅力!
.*
不匹配\n
,但它匹配一个仅包含\n
的字符串,因为它匹配 0 个字符。(?s).*
适用于我的所有内容都匹配,包括新行*
之后添加一些内容(如在/.*(?:)/
中)或使用正则表达式构造函数(var foo = new RegExp(".*")
)很容易避免。