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?