正则表达式 - 捕获可选字符串

时间:2017-08-10 18:19:05

标签: php regex pcre

我想在句子中捕获一组特定的字符串,如:

Agent/889 (SIP/1011 from SIP/1011) blablabla (Not in use) blablabla (last was 6 secs ago)

Agent/889 (SIP/1011 from SIP/1011) blablabla (Unavailable) blablabla

我在这个正则表达式中获取了我想要的所有信息:

Agent\/(\d{3})\s\(SIP\/(\d{4}).*\).*(In use|Not in use|Unavailable)\).*

但是,我希望得到一个#4组,如果存在,则捕获"中的内容。#lasts"。我试过像这样的正则表达式:

Agent\/(\d{3})\s\(SIP\/(\d{4}).*\).*(In use|Not in use|Unavailble)\).*(last was \d{1,} secs ago)?

但#4组总是在数组中得到一个空值,即使该字符串包含正则表达式中的文本。我使用PHP的preg_match_all函数,在此站点中进行模拟:PHP Live Regex

1 个答案:

答案 0 :(得分:2)

您可以使用以下正则表达式

Agent\/(\d{3})\s\(SIP\/(\d{4}).*\).*(In use|Not in use|Unavailable)\)(?:\w*\s*)*(\(last was \d{1,} secs ago\))?

检查demo herehere