除以连续两个特殊字符结尾的字符串外,按模式捕获

Posted

技术标签:

【中文标题】除以连续两个特殊字符结尾的字符串外,按模式捕获【英文标题】:Catch by pattern except strings which ends with two special characters in a row 【发布时间】:2022-01-03 12:10:57 【问题描述】:

我正在尝试创建一个通过特定模式捕获字符串的 Go 正则表达式,除了以连续 2 个特殊字符结尾的字符串,并且不想使用前瞻,这可能吗?

这是我目前的模式(?:[a-zA-Z]+.)+\.[a-zA-Z]2,

例如,给这个字符串:test.testing.com. test2.net.*

我想赶上test.testing.com不是 test2.net

【问题讨论】:

【参考方案1】:

你可以用

捕捉那部分
\b([a-zA-Z]+(?:\.[a-zA-Z]+)*)\b(?:.?$|[[:punct:]][^[:punct:]]|[^[:punct:]][[:punct:]])

请参阅regex demo。 详情

\b - 单词边界 ([a-zA-Z]+(?:\.[a-zA-Z]+)*) \b - 单词边界 (?: - 非捕获组的开始: .?$ - 任何可选的单个字符(换行符除外)和字符串结尾 | - 或 [[:punct:]][^[:punct:]] - 一个标点符号和一个非标点符号 | - 或 [^[:punct:]][[:punct:]] - 非标点符号和标点符号字符 ) - 非捕获组结束。

见Go demo:

package main

import (
    "fmt"
    "regexp"
)

func main() 
    markdownRegex := regexp.MustCompile(`\b([a-zA-Z]+(?:\.[a-zA-Z]+)*)\b(?:.?$|[[:punct:]][^[:punct:]]|[^[:punct:]][[:punct:]])`)
    str := `test.testing.com. test2.net.*`
    for _, result := range markdownRegex.FindAllStringSubmatch(str, -1) 
        fmt.Printf("%s\n", result[1])
    

// => test.testing.com

【讨论】:

以上是关于除以连续两个特殊字符结尾的字符串外,按模式捕获的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式

正则表达式中的特殊字符

mysql一个特殊的条件.字符串除以0的结果.

form表单验证

正则表达式

匹配两个特殊字符之间的子字符串,不包括字符