java - 组合多个正则表达式从 : separated string 中提取子字符串

标签 java regex

我已经被困了一段时间,开发一个正则表达式来从以下字符串中提取路径:

1.  "life:living:fast"
2.  "life"
3.  ":life"
4.  ":life:"

我有这些正则表达式可以使用:

(.{3,}):", ":(.{3,}):", ":(.{3,})", "(.{3,})

第一场比赛就是我所需要的。即每个期望的结果应该是位于单词 life 所在位置的字符串。将生命视为一个变量

但由于某种原因,组合这些单独的正则表达式是一种痛苦:如果我按顺序执行它们,我会提取“生命”一词。但是我无法将它们合二为一。

我很欣赏你的努力。

最佳答案

如果你想要第一个life与冒号一起,您可以使用:

^:?(?:.{3,}?)(?::|$)

See demo

如果您喜欢第一个 life没有冒号,切换到这个:

((?<=^:)|^)([^:]{3,}?)(?=:|$)

See demo

工作原理#1:^:?(?:.{3,}?)(?::|$)

  • ^:? ,在字符串的开头,我们匹配一个可选的冒号
  • (?:.{3,}?)延迟匹配三个或更多字符,最多...
  • (?::|$)冒号或字符串结尾

工作原理#1:((?<=^:)|^)([^:]{3,}?)(?=:|$)

  • ((?<=^:)|^)确保我们要么位于字符串的开头,要么位于字符串开头后的冒号之后
  • ([^:]{3,}?)延迟匹配不是冒号的字符...
  • 直到前瞻 (?=:|$) 的点可以断言后面是冒号或字符串结尾。

关于java - 组合多个正则表达式从 : separated string 中提取子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24304053/

相关文章:

java - Jetty Web 服务器拒绝在 Linux 上连接

java - 我试图使用 CountDownTimer 每秒将值放入数组中,但它不起作用

java - Hibernate 尝试从一对一的空属性分配 id

java - 在 SimpleDateFormat() 中更改时区

regex - 如何使用 grep/egrep 在文件中查找重复的单词?

java - 没有良好 PK 的 Oracle 遗留表 : How to Hibernate?

regex - 拆分一个逗号分隔的列表,其中文本中的逗号不会被转义

python - 如何从字符串中提取元组?

MySQL REGEXP 数字精确匹配不起作用

javascript - 正则表达式匹配以 "/"结尾的子组