正则表达式以拆分可选组

时间:2014-01-16 22:02:08

标签: regex

完整的字符串语法是:" db:server:port"

服务器和端口是可选的,即可以包含部分字符串,例如:

分贝

分贝:服务器

尝试使用:

(.*):?(.*)?:?(.*)?
  • 选择整个字符串

请告知。

4 个答案:

答案 0 :(得分:4)

给这个人一个机会:

([^:]*?):?([^:]*?):?([^:]*?)$

不确定您使用的语言是什么,因此可能无效。

示例:http://regex101.com/r/eQ6bF0

请注意为全局/多行匹配设置的示例 - 请注意,如果您不使用正确的修饰符,这将匹配换行符。

答案 1 :(得分:1)

您没有指定我能看到的语言,因此可能会有不同的具体答案,但基本问题是。*将匹配“:”字符。这意味着第一个术语将吸入整个字符串。我会使用([^:] *)而不是(。*)。

答案 2 :(得分:0)

你可以试试这个:

([^:]+)(?::([^:]+)(?::([^:]+))?)?

答案 3 :(得分:-1)

我认为这就是你要找的东西:

(db|:server|:port)

将匹配任何和所有这些:

db:server:port
db
db:server

工作示例:

http://regex101.com/r/rK1lI5