什么是正则表达式" / \\ * {2,} /"是什么意思?

时间:2015-05-08 17:23:51

标签: regex

我对正则表达式有点新意,具体来说,我不明白有2个反斜杠?我的意思是,我知道第二个是逃避角色" *",但第一个反斜杠的作用是什么?

我将这个正则表达式传递给php函数preg_match(),我试图找到包含2个或更多个连续" *"的字符串。

4 个答案:

答案 0 :(得分:1)

它是一个用程序编写的字符串文字,如果是,那是哪一个?双反斜杠可能是为了逃避转义字符,以便此正则表达式匹配至少2个*个明星字符。

在JavaScript中,您需要转义\,以便在使用RegExp构造函数将字符串文字转换为正则表达式之前,您的字符串文字可以将其表示为数据。 Why do regex constructors need to be double escaped?

答案 1 :(得分:1)

正则表达式是无效的语法。

你有这件作品:

*{2,}

基本上会读到:match n-times, 2 or more times

以下正则表达式:

/\\*.{2,}/

最简单,最接近的正则表达式是你所拥有的正则表达式,它的内容如下:
match 0 or more '\' and 2 or more characters that aren't newlines


如果你在谈论字符串本身,可能会被解释为两件事:

  • /\\*{2,}/
    读作:match a single \ and another \ n-times 2 times or more
    这是无效的语法
  • /\*{2,}\
    读为match 2 or more * 这是有效的语法

这一切都有所不同,具体取决于转义字符。

编辑:

由于问题已更新以显示正在使用的语言和引擎,我已更新以添加以下信息:

您必须将正则结果作为'/\*{2,}/' 传递为"/\\*{2,}/"(注意引号)。

两者非常相似,只是单引号('')仅支持以下转义序列:

  • \' - 制作'
  • \\ - 制作\

在PHP中,双引号字符串的处理方式不同。它们几乎支持任何转义序列,例如:

  • \" - 制作"
  • \' - 制作'
  • \\ - 制作\
  • \x<2-digit hex number> - 与chr(0x<2-digit hex number>)
  • 相同
  • \0 - 生成null字符
  • \1 - 生成一个控件字符(与chr(1)相同)
  • \u<4-digit hex number> - 生成UTF-8字符
  • \r - 在旧OSX上生成换行符
  • \n - 在Linux /更新的OSX / Windows上生成换行符(在没有b的情况下写入文件时)
  • \t - 制作标签
  • \<number>\0<number> - 与\x相同,但数字为八进制(例如:"\75""\075"生成=
  • ......(我可能忘了更多)......
  • \<anything> - 制作<anything>

https://php.net/manual/en/language.types.string.php

上详细了解此信息

答案 2 :(得分:1)

根据您使用的版块,"/\\*{2,}/"实际上可能是/\*{2,'}/字符串的表示 - 这是因为Java等语言将\视为转义字符,所以要真正将该字符放在正则表达式中,你需要转义正则表达式字符串中的字符。

所以,我们有/\*{2'}/正则表达式。 \*' matches the star character, and {2,}}表示至少两次。你的正则表达式将匹配任何两个或多个连续的明星字符。

答案 3 :(得分:0)

对于 PHP ,您使用该正则表达式的方法是重复* 2次或更多次。您可以使用下图轻松查看:

Regular expression visualization

但是当你必须在PHP中编写代码时,你必须转义反斜杠(使用反斜杠)才能在字符串中使用它。例如:

$re = "/\\*{2,}/"; 
$str = "..."; 

preg_match($re, $str, $matches);