Regex 如何使用正则表达式匹配包括引号在内的所有字符?

Regex 如何使用正则表达式匹配包括引号在内的所有字符?,regex,Regex,我正在尝试编写一个正则表达式,它将匹配以下三种模式样式: [ATTACH] [ATTACH type="full"] [ATTACH type="full" alt="3vmw5j.jpg"] 上述示例中的“full”和“3vmw5j.jpg”在生产中会有所不同,仅作为示例显示。正则表达式需要假定这些字符是完整的a-zA-Z0-9字符,文件名带有句点 我试过这个,但是它只和第一个匹配 /\[ATTACH(?>=\w+)?\] /\[ATTACH(.*)?\] 我也在regex t

我正在尝试编写一个正则表达式,它将匹配以下三种模式样式:

[ATTACH]

[ATTACH type="full"]

[ATTACH type="full" alt="3vmw5j.jpg"]
上述示例中的“full”和“3vmw5j.jpg”在生产中会有所不同,仅作为示例显示。正则表达式需要假定这些字符是完整的a-zA-Z0-9字符,文件名带有句点

我试过这个,但是它只和第一个匹配

/\[ATTACH(?>=\w+)?\]
/\[ATTACH(.*)?\]
我也在regex testers online中尝试过这一点,他们返回了3个匹配项,除了在我运行的.rb文件中唯一匹配的仍然是第一个

/\[ATTACH(?>=\w+)?\]
/\[ATTACH(.*)?\]

诚然,我不经常使用反射。提前感谢您的帮助

这在ECMAScript正则表达式中适用:

\[ATTACH\s*(type="(?<type>.+?)")?\s*(alt="(?<alt>.+?)")?\]
\[ATTACH\s*(type=“(?。+)”)”\s*(alt=“(?)

type=”“
alt=”“
属性的值分别存储在命名的捕获
type
alt


这对我来说适用于ECMAScript风格的正则表达式:

\[ATTACH\s*(type="(?<type>.+?)")?\s*(alt="(?<alt>.+?)")?\]
\[ATTACH\s*(type=“(?。+)”)”\s*(alt=“(?)

type=”“
alt=”“
属性的值分别存储在命名的捕获
type
alt


@Dai已为您的图案要求提供了答案。 我认为问题在于如何将模式传递给regex/re-match函数或对象

当您的模式中有双引号时,您必须在引号前后将模式字符串分成多个部分,然后使用CHR或CHRW(无论哪个有效)函数替换引号(“),然后将该字符串连接并作为参数传递给您的函数

使用@Dai的表达式

模式=[ATTACH\s*(type=CHR(34).toString(?++)CHR(34).toString)?\s*(alt=CHR(34).toString(?++)CHR(34).toString)?]


别忘了删除空格。

@Dai已经为您的模式需求提供了答案。 我认为问题在于如何将模式传递给regex/re-match函数或对象

当您的模式中有双引号时,您必须在引号前后将模式字符串分成多个部分,然后使用CHR或CHRW(无论哪个有效)函数替换引号(“),然后将该字符串连接并作为参数传递给您的函数

使用@Dai的表达式

模式=[ATTACH\s*(type=CHR(34).toString(?++)CHR(34).toString)?\s*(alt=CHR(34).toString(?++)CHR(34).toString)?]


不要忘记删除空格。

如果要以任意顺序匹配可选键/值对,并且值可以是带可选点的字字符,而点不能位于字符串的开头或结尾:

\[ATTACH(?: \w+="\w+(?:\.\w+)*")*]
解释

  • \[ATTACH
    匹配
    [ATTACH
  • (?:
    非捕获组
    • \w+=
      匹配空格、1+字字符和
      =
    • “\w+
      匹配
      和1+字字符
    • (?:\。\w+*”
      可以选择重复一个点和1+字字符
  • )*
    关闭非捕获组,如果有多个点,则重复0+次
  • ]
    匹配
    ]

如果要按任意顺序匹配可选键/值对,并且值可以是带可选点的字字符,而点不能位于字符串的开头或结尾:

\[ATTACH(?: \w+="\w+(?:\.\w+)*")*]
解释

  • \[ATTACH
    匹配
    [ATTACH
  • (?:
    非捕获组
    • \w+=
      匹配空格、1+字字符和
      =
    • “\w+
      匹配
      和1+字字符
    • (?:\。\w+*”
      可以选择重复一个点和1+字字符
  • )*
    关闭非捕获组,如果有多个点,则重复0+次
  • ]
    匹配
    ]

如果您想匹配任何带有或不带属性的
附加
标记(这些属性不是您示例中的属性所必需的),一个更简单的替代方法可以是:

\[ATTACH\b[^\]]*\]
解释:

\[       # Literal '['
ATTACH   # Literal 'ATTACH'
\b       # 'Bareword' (to make sure we don't find ATTACH in [ATTACHMENT], for example)
[^\]]*   # Any non-']' character repeated 0 or more times
\]       # Literal ']'

您有一个演示。

如果您想匹配任何带有或不带属性的
附加
标记(这些属性不是您示例中所需的属性),一个更简单的替代方法可以是:

\[ATTACH\b[^\]]*\]
解释:

\[       # Literal '['
ATTACH   # Literal 'ATTACH'
\b       # 'Bareword' (to make sure we don't find ATTACH in [ATTACHMENT], for example)
[^\]]*   # Any non-']' character repeated 0 or more times
\]       # Literal ']'

您有一个演示。

您正在使用哪个正则表达式实现?ECMAScript?PCRE?PREG?.NET?您正在使用哪个正则表达式实现?ECMAScript?PCRE?PREG?.NET?