我正在尝试为此实现一个正则表达式:
Line 1: OPEN_SESSION (AAAA) xxxx.yyyy
Line 2: OPEN_SESSION zzzz
获取 xxxx.yyyy 和 zzzz ,但我无法避免这个恼人的括号。我尝试过:
OPEN_SESSION[\s](?:\(*AAAA*\))?([A-Za-z0-9-_.]{4,20})
但它不起作用。我怎么能这样做?
答案 0 :(得分:0)
您可能忘记了正则表达式末尾的括号:
OPEN_SESSION[\s](?:\(*AAAA*\))?([A-Za-z0-9-_.]{4,20})
但这仍然无效。
试试这个:
OPEN_SESSION\s(?:\(AAAA\))?([\w \.]{4,20})
如果您需要在第二部分中接受空格字符,只需在正则表达式中添加\_
:
OPEN_SESSION\s(?:\(AAAA\))?([\w \_ \.]{4,20})
答案 1 :(得分:0)
你的表情几乎是正确的。它无法工作的唯一原因是你忘记了(AAAA)之后的可选空间。此外,它还应该丢弃匹配,直到那一点 - 即匹配(因为它在您的解决方案中)包括OPEN_SESSION
(包括空格)。如果你想要排除在外:
PCRE版本:
OPEN_SESSION[\s](?:\(*AAAA\)*[\s])?\K([[:alnum:]-_\.]{4,20})
\K
在此之前丢弃所有内容。
我做的唯一其他改变(除了在\ K之前添加额外的[\ s]),是因为我使用了字符类[:alnum:]这实际上是[A-Za-z0-的缩写] 9]。但这是个人偏好的问题 - 它不会改变最终结果。
Java版:
(?:OPEN_SESSION[\s][(]*[A]*[)]*[\s]?)([A-Za-z0-9_\-.]{4,20})