Regex 正则表达式-匹配任何内容

Regex 正则表达式-匹配任何内容,regex,Regex,如何使表达式完全匹配任何内容(包括空格)示例: 正则表达式:我买了羊 火柴:我买了羊。我买了一只羊。我买了五只羊 'I bought sheep. I bought a sheep. I bought five sheep.'.match(/I bought(.*)sheep./)[1]; 我尝试使用(.*),但似乎不起作用。尝试以下方法: I bought (.* )?sheep ([a]|[^a]) 甚至 I bought .*sheep 通常,点与除换行符以外的任何字符匹配 因此,

如何使表达式完全匹配任何内容(包括空格)
示例:

正则表达式:我买了羊

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

'I bought sheep. I bought a sheep. I bought five sheep.'.match(/I bought(.*)sheep./)[1];
我尝试使用
(.*)
,但似乎不起作用。

尝试以下方法:

I bought (.* )?sheep
([a]|[^a])
甚至

I bought .*sheep

通常,点与除换行符以外的任何字符匹配

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


如果您使用的JavaScript没有“dotall”选项,请尝试
[\s\s]*
。这意味着“匹配任意数量的空白或非空白字符”——实际上是“匹配任意字符串”


另一个仅适用于JavaScript的选项是
[^]*
,它也与任何字符串匹配。但是
[\s\s]*
似乎被更广泛地使用,可能是因为它更便于携带。

使用
*
,并确保您使用的是实现的等效单行,以便在行结尾上匹配

这里有一个很好的解释->


(.*)
与任何东西都匹配-我已经使用它很多年了。
(.*)
对我不起作用。我正在尝试匹配由
/***/
包围的注释,这些注释可能包含多行

试试这个:

I bought (.* )?sheep
([a]|[^a])
此正则表达式匹配
a
除a以外的任何内容。当然,这意味着一切都匹配

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

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

[\s\S]

选择并记住以下内容之一!!!:)

说明:

[\s\S]*
[\w\W]*
[\d\D]*
\s
:空白
\s
:非空白

\w
:word
\w
:非word

\d
:数字
\d
:非数字

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




奖金编辑:

[\s\S]*
[\w\W]*
[\d\D]*
如果要在一行上匹配所有内容,可以使用以下方法:

[^\n]+
说明:

[\s\S]*
[\w\W]*
[\d\D]*
^
:不是

\n
:换行符


+
:对于1个或更多字符的JavaScript,最好和最简单的答案似乎是
/.\*/

正如其他人所建议的那样,
/(.*)/
也可以,但
/。\*/
更简单。就我所见,模式中的
()
是不需要的,也不需要结尾
来完全匹配任何内容(包括空字符串)


非解决方案:

[\s\S]*
[\w\W]*
[\d\D]*
  • /[\s\s]/
    与空字符串不匹配,因此它不是解决方案

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


/([\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

用于测试

老实说,很多答案都是旧的,因此我发现,如果您只需使用“/.*/i”测试任何字符串,而不考虑字符内容,就可以得到所有答案

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


console.log(“line_1\nline_2.match(+/.++/s))
2018规范提供了(别名:dotAll),因此
将匹配任何字符,包括换行符:

const regExAll=/.*/s//注意“s”
设str=`
一切
在这个
一串
将
是
匹配。包括空格(偶数换行符)。
`;
log(`Match:`,regExAll.test(str))//真的
log(`Index Location:`,str.search(regExAll));

如果没有换行符,让newStr=str.replace(regExAll,“
/.*/
非常有效。如果必须匹配换行符,以下是一些解决方案:

解决方案 描述
/.*/s
/s
(点全部标志)使
(通配符)匹配任何内容,包括换行符。加入
*
(星号),它将匹配所有内容。
/[\s\s]*/
\s
(空格元字符)将匹配任何空格字符(空格;制表符;换行符;…),而
\s
(与
\s
相反)将匹配任何空格字符。
*
(星号)将匹配所有出现的字符集(由
[]
封装)。
  • 正则表达式:

    /I bought.*sheep./
    
    /I bought(.*)sheep./
    
    匹配-整个字符串直到行尾

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

  • 正则表达式:

    /I bought.*sheep./
    
    /I bought(.*)sheep./
    
    匹配-整个
    字符串,并在()中捕获子字符串
    ,以供进一步使用

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

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

    使用Javascript/Regex的示例

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

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

    输出:

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


  • *
    应该可以。你能粘贴你的实际代码吗?你用什么语言编码?点与换行符不匹配它是n