带有标题的Regex Base64映像

带有标题的Regex Base64映像,regex,coldfusion,Regex,Coldfusion,我有时会遇到base64图像转换不正确的问题。在转换之前,我需要一种方法来测试图像是否为正确的base64格式,以便我可以尝试进一步研究这个问题。我在网上找到了一些正则表达式,但我认为它们只需要没有标题的字符串。我有带标题的字符串。我试图添加标题,但它不断中断 原件: ^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$ 我添加了标题,但不起作用: ^([data:image/png;base6

我有时会遇到base64图像转换不正确的问题。在转换之前,我需要一种方法来测试图像是否为正确的base64格式,以便我可以尝试进一步研究这个问题。我在网上找到了一些正则表达式,但我认为它们只需要没有标题的字符串。我有带标题的字符串。我试图添加标题,但它不断中断

原件:

^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$
我添加了标题,但不起作用:

^([data:image/png;base64,][A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$

谢谢

您可能会注意到原始正则表达式中使用了
[方括号]
,这些创建的字符集与so
[数据:image/png;base64,]
中的任何字符都匹配
d,a,t,a,…,6,4,
。相反,您可能希望创建一个非捕获组,因为我认为您正在尝试将标题设置为可选的,例如
(?:data:image/png;base64,)?

但是,如果您需要标题,可以同时删除非捕获组和
量词

^(data:image/png;base64,[A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$

您可能会注意到在原始正则表达式中使用了
[方括号]
,这些创建的字符集与so
[数据:image/png;base64,]
中的任何字符都匹配
d,a,t,a,…,6,4,
。相反,您可能希望创建一个非捕获组,因为我认为您正在尝试将标题设置为可选的,例如
(?:data:image/png;base64,)?

但是,如果您需要标题,可以同时删除非捕获组和
量词

^(data:image/png;base64,[A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$
正则表达式

^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$
所有这些字符是什么意思:

^
。。。查找从行或字符串缓冲区开头开始的字符串

。。。定义一个标记组,用于反向引用括号内表达式找到的字符串,或用于应用此处使用的乘数。仅为应用乘数而对表达式进行分组通常比使用非标记组更好,即使用
(?:
,其中,在左括号后面加上问号和冒号,使该组成为非标记组

[
..
]
。。。定义一个正字符类,这意味着方括号内的任何字符都应找到一次,以进行正匹配
[^
..
]
将是一个负字符类定义,这意味着除方括号中的一个字符外,应找到任何字符

[A-Za-z0-9+/]
。。。ASCII表中的大写或小写字母、数字、加号或斜杠字符

{4}
。。。是一个乘数,表示前一个表达式或字符正好四次

*
。。。也是一个乘数,表示上一个表达式或字符0次或多次

|
。。。表示

$
。。。表示没有匹配的行终止符或字符串缓冲区的行结束

所以这个表达式的意思是:

  • 查找以行或字符串缓冲区开头的字符串
  • 由0个或多个子字符串组成,每个子字符串正好包含4个字符,每个字符由字母、数字、加号或斜杠字符组成
  • 行或字符串缓冲区末尾的最后一个子字符串是
    • 也是由4个字母、数字、加号或斜杠字符组成的字符串
    • 仅由3个字母、数字、加号或斜杠和等号(第四个字符)组成的字符串
    • 仅由两个字母、数字、加号或斜杠以及两个等号(作为第三个和第四个字符)组成的字符串
  • 要在行或字符串缓冲区的开头额外允许可选的头字符串,表达式应修改为:

    ^(?:data:image/png;base64,)?(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$
    
    非标记组
    (?:data:image/png;base64,)
    后面的问号在这里表示前面的表达式(只是一个固定字符串)零次或一次

    如您所见,我还通过在左括号后插入
    ?:
    将2个标记组更改为2个非标记组。

    正则表达式

    ^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$
    
    所有这些字符是什么意思:

    ^
    。。。查找从行或字符串缓冲区开头开始的字符串

    。。。定义一个标记组,用于反向引用括号内表达式找到的字符串,或用于应用此处使用的乘数。仅为应用乘数而对表达式进行分组通常比使用非标记组更好,即使用
    (?:
    ,其中,在左括号后面加上问号和冒号,使该组成为非标记组

    [
    ..
    ]
    。。。定义一个正字符类,这意味着方括号内的任何字符都应找到一次,以进行正匹配
    [^
    ..
    ]
    将是一个负字符类定义,这意味着除方括号中的一个字符外,应找到任何字符

    [A-Za-z0-9+/]
    。。。ASCII表中的大写或小写字母、数字、加号或斜杠字符

    {4}
    。。。是一个乘数,表示前一个表达式或字符正好四次

    *
    。。。也是一个乘数,表示上一个表达式或字符0次或多次

    |
    。。。表示

    $
    。。。表示没有匹配的行终止符或字符串缓冲区的行结束

    所以这个表达式的意思是:

  • 查找以行或字符串缓冲区开头的字符串
  • 组成