【问题标题】:Regex to match characters to the right of a colon正则表达式匹配冒号右侧的字符
【发布时间】:2018-02-11 00:26:38
【问题描述】:

我被正则表达式困住了。我正在尝试将任何语言的单词匹配到冒号右侧而不匹配冒号本身

基本规则:

  • 为了使行有效,它不能以[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_]+(?=:)) 来匹配: 左侧的字符。我似乎无法扭转逻辑。

我目前最接近的是(?!(?!:)).+。这似乎与冒号右侧的所有内容以及冒号本身相匹配。我只是不知道如何在匹配中不包含:

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

【问题讨论】:

    标签: regex pcre


    【解决方案1】:

    你可以使用这个正则表达式:

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

    RegEx Demo

    RegEx 拆分:

    • ^:开始
    • [a-z0-9_]+:匹配 1+ 个 [a-z0-9_] 字符
    • ::匹配冒号
    • \K: 重置目前匹配的信息
    • (?!//):在冒号之后禁止// 的负前瞻以避免匹配潜在的 URL
    • .*: 匹配任何东西直到结束

    【讨论】:

    • 我试图不匹配冒号。只有它右边的字符。
    • 然后你可以使用:^[a-z0-9_]+:\K(?!//).* 还记得\w 也会匹配你写的你不想匹配的大写字母。
    【解决方案2】:

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

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

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


    正如您标记的 pcre,这是您需要的模式(仅在冒号右侧):

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

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

    【讨论】:

    • 我正在尝试匹配冒号右侧的字符而不匹配冒号本身。
    • @I0_ol,看看我的pcre 模式
    • 这正是我所需要的。谢谢。
    【解决方案3】:

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

    ^.*?: - 从行首开始,直到冒号为止的任何字符(非贪婪)都包括在内

    (.*)$ - 使用匹配组来匹配它后面直到行尾的任何内容

    Link to DEMO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-07
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多