正则表达式-匹配任何东西

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

我买了_____羊。

我买了羊。我买了一只羊。我买了五只羊。

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

934857 次浏览

试试这个:

I bought (.* )?sheep

甚至

I bought .*sheep

通常点号匹配任意字符除了换行

因此,如果.*不起作用,则设置“点也匹配换行”选项(或使用(?s).*)。

如果你正在使用JavaScript,它没有“dotall”选项,请尝试[\s\S]*。这意味着“匹配任意数量的空白或非空白字符”——有效地“匹配任何字符串”。

另一个只适用于JavaScript的选项是[^]*,它也匹配任何字符串。但是[\s\S]*似乎被更广泛地使用,也许是因为它更可移植。

使用.*,并确保您使用的实现相当于单行,以便与线的结局匹配。

这里有一个很好的解释-> http://www.regular-expressions.info/dot.html

<?php
$str = "I bought _ sheep";
preg_match("/I bought (.*?) sheep", $str, $match);
print_r($match);
?>

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

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

(.*?)不适合我。我正在尝试匹配/* */包围的注释,它可能包含多行。

试试这个:

([a]|[^a])

这个正则表达式匹配aanything else expect a。当然,这意味着匹配一切。

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

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

[\s\S]

选择,记住下面的1个!!:)

[\s\S]*
[\w\W]*
[\d\D]*

解释:

\s:空白

\w: word \W: not word

\d:数字

(如果你想要1个或更多字符[而不是0个或更多],你可以将*替换为+)。

< br > < br > < br >

附加编辑:

如果你想匹配一行中的所有内容,你可以使用这个:

[^\n]+

解释:

^:不

\n: linebreak

+:用于1个字符或多个字符

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

正如其他人所建议的,/(.*?)/也可以工作,但/.\*/更简单。模式中的()是不需要的,据我所知,也不需要结尾?来匹配任何东西(包括空字符串)


的办法:

  • /[\s\S]/不匹配空字符串,所以它不是解决方案。

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

/([\s\S]\*)/工作,没有注释问题。但是它比/.*/更长、更复杂。

因为.查找单个字符,除了换行符或行结束符。

所以,要匹配任何东西,你可以这样使用:(.|\n)*?

希望能有所帮助!

我建议使用/(?=.*...)/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"将充分获得所有内容。

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

console.log("line_1\nline_2".match(/.+/s))

Note: It's not supported by all browsers yet.

2018规范提供了s标志(别名:dotAll),因此.将匹配任何字符,包括换行符:

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

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

< span style=" font - family:宋体;"> < / th >解决方案 < span style=" font - family:宋体;"> < / th描述> < span style=" font - family:宋体;"> /.*/s td > < / < span style=" font - family:宋体;">/s (dot all标志)使.(通配符)匹配任何内容,包括换行符。添加*(星号),它将匹配所有内容。Read more. . < span style=" font - family:宋体;"> /[\s\S]*/ td > < / < span style=" font - family:宋体;">\s(空白元字符)将匹配任何空白字符(space;选项卡;换行;),而\S (\s的相反)将匹配任何而不是为空白字符的字符。*(星号)将匹配所有出现的字符集(由[]封装)。Read more. .
  1. < p >正则表达式:

    /I bought.*sheep./
    

    匹配- 整个字符串直到行尾

    I bought sheep. I bought a sheep. I bought five sheep.

  2. < p >正则表达式:

    /I bought(.*)sheep./
    

    匹配- 整个字符串,并捕获()内的子字符串以供进一步使用

    I bought sheep. I bought a sheep. I bought five sheep.

    我boughtsheep. I bought a sheep. I bought fivesheep。

    使用Javascript /正则表达式的示例

    'I bought sheep. I bought a sheep. I bought five sheep.'.match(/I bought(.*)sheep./)[0];
    

    输出:

    我买了羊。我买了一只羊。我买了五只羊。

    'I bought sheep. I bought a sheep. I bought five sheep.'.match(/I bought(.*)sheep./)[1];
    

    输出:

    “;羊。我买了一只羊。我买了五个;

我用这个:(.|\n)+对我来说就像一个魅力!

一个选项是空正则表达式,在JavaScript中表示为/(?:)/。(你也可以使用new RegExp())。逻辑上,一个空正则表达式应该匹配包含“;空”的字符串;在任何位置,当然是所有的位置。

有关讨论和更多细节,请参阅这个SO问题这篇博文