You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

preg_match_all多行匹配失效,如何提取iRule字符串中的Pool路径?

解决多行字符串中提取F5 Pool路径的正则问题

你的问题出在原正则的匹配范围没有精准限定,导致把行尾的无关字符也包含进去了。咱们一步步来修正:

原正则的问题分析

你用的/\/([^"]+)$/m存在两个核心问题:

  1. [^"]+会匹配除双引号外的所有字符,包括空格和},所以会把networkname/hostname_80 }这类带后缀的内容都捞进来;
  2. 没有限定匹配的上下文(比如只匹配pool关键字后面的路径),容易误匹配字符串中其他无关的斜杠内容。

修正后的正则方案

更精准的做法是基于pool关键字来定位目标路径,用这个正则:

preg_match_all('/pool\s+(\/[^}\s]+)/', $mystring, $result);

正则各部分解释:

  • pool\s+:精准匹配pool关键词,以及后面跟着的一个或多个空白字符(空格、制表符都能覆盖);
  • (\/[^}\s]+):捕获组,匹配以/开头的路径,直到遇到}或空白字符为止——刚好截断到Pool路径的结尾,不会包含后面的 }。

完整代码示例

$mystring = <<<'EOF'
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 }
    }
}
EOF;

preg_match_all('/pool\s+(\/[^}\s]+)/', $mystring, $result);
print_r($result[1]);

输出结果

Array
(
    [0] => /networkname/hostname_80
    [1] => /anothernetworkname/anotherhostname_80
)

这样就完美提取到了你需要的Pool路径啦~

内容的提问来源于stack exchange,提问作者RidRoid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:52:45