Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式(PHP风格)匹配多行或非多行_Php_Regex_Multiline - Fatal编程技术网

正则表达式(PHP风格)匹配多行或非多行

正则表达式(PHP风格)匹配多行或非多行,php,regex,multiline,Php,Regex,Multiline,我正在处理一个正则表达式,它将匹配以下两段语法 一, 二, 到目前为止我得到的最好的结果是 ^aaa会计系统默认\n操作类型|开始-停止\n |组tacacs\+ 上面的正则表达式将匹配语法编号2而不是1?把我的头发拔出来!我知道这可能很简单,但我是个Regex新手有什么想法吗? 在第1条语法中,第2行和第3行的开头有空格,但是没有显示出来,以便真正了解语法是如何呈现的。请查看下面的Regex101链接。谢谢 这是在Regex101中 要跨多行匹配,需要使用DOTALL标志: 否则: /\baa

我正在处理一个正则表达式,它将匹配以下两段语法

一,

二,

到目前为止我得到的最好的结果是

^aaa会计系统默认\n操作类型|开始-停止\n |组tacacs\+

上面的正则表达式将匹配语法编号2而不是1?把我的头发拔出来!我知道这可能很简单,但我是个Regex新手有什么想法吗? 在第1条语法中,第2行和第3行的开头有空格,但是没有显示出来,以便真正了解语法是如何呈现的。请查看下面的Regex101链接。谢谢

这是在Regex101中


要跨多行匹配,需要使用DOTALL标志:

否则:

/\baaa accounting system default.*?group tacacs\+/s

要跨多行匹配,需要使用DOTALL标志:

否则:

/\baaa accounting system default.*?group tacacs\+/s

您可以将模式中的常规空格替换为与任何空格匹配的\s:

'~^aaa\s+accounting\s+system\s+default(?:\s+action-type)?\s+start-stop\s+group\s+tacacs\+~m'

此外,我还进行了一些其他优化,以便可以匹配两种类型的字符串:

^-匹配由于/m修改器而导致的行的开头 aaa\s+记帐\s+系统\s+默认-匹配序列aaa记帐系统默认值,其中\s+匹配一个或多个空格 ?:\s+动作类型?-可选的操作类型,在操作类型之前有一个或多个空格 \s+start stop\s+group\s+tacacs\+-匹配单词之间有1个或多个空格的start stop group tacacs+。
您可以将模式中的常规空格替换为与任何空格匹配的\s:

'~^aaa\s+accounting\s+system\s+default(?:\s+action-type)?\s+start-stop\s+group\s+tacacs\+~m'

此外,我还进行了一些其他优化,以便可以匹配两种类型的字符串:

^-匹配由于/m修改器而导致的行的开头 aaa\s+记帐\s+系统\s+默认-匹配序列aaa记帐系统默认值,其中\s+匹配一个或多个空格 ?:\s+动作类型?-可选的操作类型,在操作类型之前有一个或多个空格 \s+start stop\s+group\s+tacacs\+-匹配单词之间有1个或多个空格的start stop group tacacs+。
它不起作用,因为您的可选组中有冗余空间:

^aaa accounting system default(\n action-type|) start-stop(\n|) group tacacs\+
您可以使用非捕获组以更好的方式编写它?:。。。还有可选的量词


这样可以避免无用的捕获

因为可选组中有多余的空间,所以它不起作用:

^aaa accounting system default(\n action-type|) start-stop(\n|) group tacacs\+
您可以使用非捕获组以更好的方式编写它?:。。。还有可选的量词


这样可以避免无用的捕获

我对问题进行了编辑,使示例字符串看起来与regex101.com上的相同。如果空格可以是任意大小,我会投票支持我的答案:我编辑了这个问题,使示例字符串看起来与regex101.com上的相同。如果空格真的可以是任意大小,我会投票支持我的答案:注意,要匹配所有Unicode空格,不要忘记在正则表达式的末尾添加一个/u修饰符:“^aaa\s+accounting\s+system\s+default?”:\s+动作类型?\s+开始-停止\s+组\s+tacacs\+~mu”很棒的东西,我也学到了一些东西!谢谢你的帮助!非常感谢,不客气。注:我也更喜欢与?应用于它们的量词,如?:。。。?当我需要在我的模式中使用可选字符序列作为Casimir答案中的注释时。再次感谢非捕获组链接帮助我很好地处理了它。注意,要匹配所有Unicode空白,别忘了在正则表达式的末尾添加a/u修饰符:“^aaa\s+accounting\s+system\s+default:\s+操作类型?\s+开始-停止\s+组\s+tacacs\+~mu”很棒的东西,我也学到了一些东西!谢谢你的帮助!非常感谢,不客气。注:我也更喜欢与?应用于它们的量词,如?:。。。?当我需要在我的模式中使用一个可选的字符序列作为Casimir在他的答案中的注释时。再次感谢非捕获组链接帮助我很好地处理了它谢谢你的输入!谢谢你的意见!
^aaa accounting system default(?:\n action-type)? start-stop\n? group tacacs\+