我有这个正则表达式:
source_IP = re.findall(r':name\s+[\(]Anti-Spoof-firewallX-eth2-02[\)]\s+.*\s+.*\s+.*\s+.*\s+.*\s+.*\s+.*\s+.*\s+.*\s+.*\s+.*\s+.*\s+.*:Name\s+[\(](.*)+[\)]'
针对以下文字运行:
:name (Anti-Spoof-firewallX-eth2-02)
)
:ip_convention_object ()
:color (black)
:comments ()
:group_convention_query ()
:group_sort_type (3)
:is_convention_on (false)
:member_class (network_object)
:members_query ()
:type (group)
: (ReferenceObject
:Table (network_objects)
:Name (n-10.10.24.0_s22)
:Uid ("{DACDEBF9-C041-4C48-928E-92ECCC606CD5}")
)
: (ReferenceObject
:Table (network_objects)
:Name (n-10.1.90.0_s23)
:Uid ("{3E947D4C-677-45B4-AFCC-553351A7F03E}")
)
: (ReferenceObject
:Table (network_objects)
:Name (n-100.141.28.0_s23)
:Uid ("{3EE3901E-7490-4FDF-A66C-C452D17794}")
)
: (ReferenceObject
:Table (network_objects)
:Name (n-10.20.20.0_s22)
:Uid ("{51EED8DA-BFDB-42CD-8C3B-71DRRR6111E}")
)
: (ReferenceObject
:Table (network_objects)
:Name (n-10.19.32.0_s23)
:Uid ("{58CDB-6FDC-4F42-8F6B-3933428EB408}")
)
: (ReferenceObject
:Table (network_objects)
:Name (n-10.11.16.64_s27)
:Uid ("{1D9A7204-ADE5-4414-B264-EA51A8TRE87}")
)
)
我需要所有的IP地址,但正则表达式只返回第一个(n-10.10.24.0s22)。我怎样才能纠正我的正则表达式?
答案 0 :(得分:0)
您需要使用更简单的正则表达式,例如foreach($option as $k => $v)
{
$key = 'option_' . $k;
$$key = $v;
}
echo $option_Size;
。
说明:
:Name\s+\(([^\)]+)\)
找到:Name
Name:
后跟一个或多个空格
\s+
后跟\(
(
捕获([^\)]+)
内的所有内容;如果括号可能为空,则将()
更改为+
*
结尾的 \)
findall的文档说:
返回字符串中pattern的所有非重叠匹配,作为字符串列表。从左到右扫描字符串,并按找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。结果中包含空匹配,除非它们触及另一场比赛的开头。
所以你的正则表达式的第一位是不必要的和限制的。
)
上查看