我坚持使用正则表达式。我试图将任何语言中的单词与冒号右侧的匹配,而不与冒号本身匹配。
基本规则:
要使某个行有效,在[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_]+(?=:))
来匹配:
左侧的字符。我似乎无法扭转逻辑。
我现在最接近的是(?!(?!:)).+
。这似乎与结肠右侧的一切以及结肠本身相匹配。我无法弄清楚如何在比赛中不包括:
。
你们其中一个正则表达式向导可以帮助我吗?如果有任何不清楚的地方,请告诉我。
答案 0 :(得分:2)
您可以使用此正则表达式:
^[a-z0-9_]+:\K(?!//).*
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
- 重置报告的匹配的起点。最终匹配中不再包含任何以前消费的字符答案 2 :(得分:0)