2012-03-21 72 views
0

我必须为我的小问题找到解决方案: - /。匹配可选字符串正则表达式

我有一个消息如

状态:OK

状态:ERR |下一条消息

是有可能创造一个正则表达式 “状态” +可选消息如果存在?

由于在第一组中有很多

勒内

+0

这是什么表达?你想提取状态码吗? – 2012-03-21 14:09:37

+0

是和可选消息 – Rene 2012-03-21 14:14:14

+0

你到目前为止尝试过什么? http://regular-expressions.info是一个开始的好地方。 – 2012-03-21 14:23:27

回答

4

您可以使用这样的事情:

/^Status:\s*([A-Z]+)(?:\|([^$]*))?$/ 

这所有的数据相匹配,并返回OK或ERR为第一要素,只有将消息作为第二个元素。

其他信息(?:表示法(在\ |之前)是一个“隐藏”分组。那就是组,但不要取。

+0

这个作品完美!非常感谢:-) – Rene 2012-03-21 14:28:29

+0

哇,一个非捕获组内的捕获组?尼斯:P – 2012-03-21 14:29:38

+0

谢谢。它可以是一个强大的工具:-) – mikaelb 2012-03-21 14:31:45

0
/Status: (\w+)(\|(.+))?/ 

这将捕获的状态码(OK,ERR),和一个消息(如果存在于字符串)所述第三组中使用。

+0

几乎完美:-) – Rene 2012-03-21 14:23:23

+0

但它是否可能没有“|” ? – Rene 2012-03-21 14:23:37

+0

正则表达式中的'\ |'用于匹配“|”将状态代码与消息中的消息分开。你的意思是这些字符串实际上不会包含“|”字符? – 2012-03-21 14:25:21