正则表达式匹配冒号右侧的字符

时间:2017-09-01 22:29:11

标签: regex pcre

我坚持使用正则表达式。我试图将任何语言中的单词与冒号右侧的匹配,而不与冒号本身匹配

基本规则:

  • 要使某个行有效,在[a-z0-9_]之后,该行不得以:之外的任何字符开头或包含任何字符。

  • :右侧的任何字符都应匹配,只要该行以上面定义的字符集开头即可。

例如,给定一个如下字符串:

this string should not match

bob_1:Hi. I'm Bob. I speak русский and this string should match  

alice:Hi Bob. I speak 한국어 and this string should also match

http://example.com - would prefer to not match URLs

This string:should not match because no spaces or capital letters are allowed left of the colon

上述5个字符串中只有2个需要匹配。而且只在结肠右侧。

  • Hi. I'm Bob. I speak русский and this string should match

  • Hi Bob. I speak 한국어 and this string should also match

我目前正在使用(^[a-z0-9_]+(?=:))来匹配:左侧的字符。我似乎无法扭转逻辑。

我现在最接近的是(?!(?!:)).+。这似乎与结肠右侧的一切以及结肠本身相匹配。我无法弄清楚如何在比赛中不包括:

你们其中一个正则表达式向导可以帮助我吗?如果有任何不清楚的地方,请告诉我。

3 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式:

^[a-z0-9_]+:\K(?!//).*

RegEx Demo

RegEx分手:

  • ^:开始
  • [a-z0-9_]+:匹配[a-z0-9_]个字符的1+
  • ::匹配冒号
  • \K:到目前为止重置匹配的信息
  • (?!//):在冒号后立即禁止//以避免匹配潜在网址的否定前瞻
  • .*:匹配任何内容直到结束

答案 1 :(得分:1)

短正则表达式模式(不区分大小写):

^\w+:(\w.*)
  • \w - 匹配任何字词(等于[a-zA-Z0-9_]

https://regex101.com/r/MZhqSL/6

当您标记为pcre时,您需要的模式( 仅在冒号右侧 ):

^\w+:\K\w.*
  • \K - 重置报告的匹配的起点。最终匹配中不再包含任何以前消费的字符

https://regex101.com/r/E1yHVY/1

答案 2 :(得分:0)

您可以使用正则表达式:^.*?:(.*)$

^.*?: - 从行的开头,包括冒号(非贪婪)的任何字符

(.*)$ - 将匹配组用于跟随它的任何内容,直到行尾

Link to DEMO