我有一个字符串mystring
,其中包含换行符:
when HTTP_REQUEST {
switch -glob [string tolower [HTTP::host]] {
"sub1.sub.dom" {
pool /networkname/hostname_80
}
"sub2.sub.dom" {
pool /anothernetworkname/anotherhostname_80
}
default {
drop
}
}
}
我正在尝试使用preg_match_all
从该字符串中提取池,但我无法得到想要的结果......我目前正在使用:
preg_match_all('/\/([^"]+)$/m',$mystring,$result);
结果是:
Array
(
[0] => networkname/hostname_80
}
[1] => anothernetworkname/anotherhostname_80
}
default {
drop
}
}
})
我有两个问题:
感谢。
答案 0 :(得分:2)
Wiktor正则表达式是正确的,但在空格.
之后缺少\S
,请参阅preg_match_all Demo
/\bpool\h+\K\S.+$/m
正则表达式解释:
全局模式标记
答案 1 :(得分:1)
您似乎只想在单词pool
,1 +空格和/
之后提取非空白字符块。
您可以使用
'~\bpool\h+/\K\S+$~m'
在PHP中使用preg_match_all
函数。请参阅regex demo。
<强>详情
\bpool
- 整个单词pool
(下一个字符应为水平空格,\b
为单词边界)\h+
- 1+水平空白字符/
- /
字符\K
- 匹配重置运算符以丢弃目前为止匹配的文本\S+
- 除了空白之外的1个字符$
- 行尾(由于m
修饰符)。$re = '~\bpool\h+\K/\S+$~m';
$str = "when HTTP_REQUEST {\nswitch -glob [string tolower [HTTP::host]] {\n \"sub1.sub.dom\" {\n pool /networkname/hostname_80\n }\n \"sub2.sub.dom\" {\n pool /anothernetworkname/anotherhostname_80\n }\n default {\n drop \n }\n}\n}";
if (preg_match_all($re, $str, $matches)) {
print_r($matches[0]);
}
输出:
Array
(
[0] => networkname/hostname_80
[1] => anothernetworkname/anotherhostname_80
)