介于.*?之间的可选元素



我正试图通过PCRE从以下示例中提取一个可选元素。如果ActivityID存在,我需要取出xxxx-xxx-xxxx-xxxxxx。

我想我需要使用lookahead之类的东西,但我无法完全理解。

</Level><Task>...<Correlation ActivityID='{xxxx-xxx-xxxx-xxxx-xxxxx}'/><Execution...</Channel>
This works if the element exists, saving to taco64:
</level>(?<taco16>.*?)ActivityID='{(?<taco64>.*)}'(?<taco32>.*?)<Computer>
Being optional drops everything into taco32. 
</level>(?<taco16>.*?)(ActivityID='{(?<taco64>.*)}')?(?<taco32>.*?)<Computer>

使用

</level>(?:(?<taco16>.*?)(ActivityID='{(?<taco64>.*)}'))?(?<taco32>.*?)<Computer>

请参阅正则表达式证明。

解释

--------------------------------------------------------------------------------
<                        '<'
--------------------------------------------------------------------------------
/                       '/'
--------------------------------------------------------------------------------
level>                   'level>'
--------------------------------------------------------------------------------
(?:                      group, but do not capture (optional
(matching the most amount possible)):
--------------------------------------------------------------------------------
(?<taco16>                 group and capture to taco16:
--------------------------------------------------------------------------------
.*?                      any character except n (0 or more
times (matching the least amount
possible))
--------------------------------------------------------------------------------
)                        end of taco16
--------------------------------------------------------------------------------
(?<taco64>               group and capture to taco64:
--------------------------------------------------------------------------------
ActivityID='{            'ActivityID='{'
--------------------------------------------------------------------------------
(                        group and capture to 3:
--------------------------------------------------------------------------------
.*                       any character except n (0 or more
times (matching the most amount
possible))
--------------------------------------------------------------------------------
)                        end of taco64
--------------------------------------------------------------------------------
}'                       '}''
--------------------------------------------------------------------------------
)                        end of 2
--------------------------------------------------------------------------------
)?                       end of grouping
--------------------------------------------------------------------------------
(?<taco32>                group and capture to taco32:
--------------------------------------------------------------------------------
.*?                      any character except n (0 or more times
(matching the least amount possible))
--------------------------------------------------------------------------------
)                        end of taco32
--------------------------------------------------------------------------------
<Computer>               '<Computer>'

相关内容

  • 没有找到相关文章

最新更新