多行正则表达式没有捕捉到正确的掩码
Multiline Regex not catching the correct mask
我正在尝试使用此正则表达式在文件中捕获具有特殊语法的标记:
([a-z0-9 >}\/])(\{(var)\:([a-z0-9\_\/\-\.]+)([\?0-9]+)*\})([a-z0-9 {<\/])
标签看起来像:
{var:contactText}
但是正如您在我的正则表达式中看到的那样,我想了解 {var:something} 前后的内容。我的表达式工作正常,除非表达式单独在一行中。
我有 m
标志来防止出现问题,但仍然没有用。
实例:https://regex101.com/r/6T6OJm/1/
我错过了什么吗? ([a-z0-9 {<\/])
的最后一部分好像是不接受换行的,那怎么解决呢?
像猫一样,“多线”修饰符是一个虚假的朋友。 m 修饰符并不意味着模式会 运行 神奇地跨越多行,它只是改变了 ^
和 $
锚点的含义(从字符串的 start/end 到start/end 行)。
您所需要的只是使用 \s
class 计算潜在的白色字符(还包括回车 return \r
和换行符 \n
个字符)。
~
([a-z0-9 >}/])
\s* ( { (var) : ([a-z0-9_/.-]+) ([?0-9]+)? } ) \s*
([a-z0-9 {</])
~xi
请注意,模式中的许多字符不需要转义。
由于模式有点长,我使用 x 修饰符不考虑模式中的空格:它更具可读性。
不确定所有捕获组是否都有用。
我正在尝试使用此正则表达式在文件中捕获具有特殊语法的标记:
([a-z0-9 >}\/])(\{(var)\:([a-z0-9\_\/\-\.]+)([\?0-9]+)*\})([a-z0-9 {<\/])
标签看起来像:
{var:contactText}
但是正如您在我的正则表达式中看到的那样,我想了解 {var:something} 前后的内容。我的表达式工作正常,除非表达式单独在一行中。
我有 m
标志来防止出现问题,但仍然没有用。
实例:https://regex101.com/r/6T6OJm/1/
我错过了什么吗? ([a-z0-9 {<\/])
的最后一部分好像是不接受换行的,那怎么解决呢?
像猫一样,“多线”修饰符是一个虚假的朋友。 m 修饰符并不意味着模式会 运行 神奇地跨越多行,它只是改变了 ^
和 $
锚点的含义(从字符串的 start/end 到start/end 行)。
您所需要的只是使用 \s
class 计算潜在的白色字符(还包括回车 return \r
和换行符 \n
个字符)。
~
([a-z0-9 >}/])
\s* ( { (var) : ([a-z0-9_/.-]+) ([?0-9]+)? } ) \s*
([a-z0-9 {</])
~xi
请注意,模式中的许多字符不需要转义。 由于模式有点长,我使用 x 修饰符不考虑模式中的空格:它更具可读性。
不确定所有捕获组是否都有用。