tetsdfdsf## Contents- [test](#test) - [Contents](#contents) - [test2](#test2) - [fdf and dfdf](#dfdf-and-dffd) - [dfdf](#dfdf) - [dfdf Building](#dfdf-building) - [Build dfdf](#build-dfdf) - [dfdf Line](#df-dfd) - [dfd dfdf dfd](#advanced-console-dfd) - [dfdf dfdf](#standard-cli) - [dfdf](#configuration) - [Continuous Integration](#continuous-integration) - [dddd Preprocessors](#dddd-preprocessors)**[⬆ back to top](#contents)**
上面这段文本,我用这个正则Contents\n\n(.|\n)+?\n\n
匹配中间的内容。
用网页版的在线正则测试是可以匹配出来中间的结果的,用go正则结果却是空的,什么问题?
var matchMenu = regexp.MustCompile(`Contents\n\n(.|\n)+?\n\n`)menuData := matchMenu.FindSubmatch(getContent())slog.Info(fmt.Sprintf("%#v", menuData))
输出结果:2023/10/25 17:53:04 INFO [][]uint8(nil)
问问这什么差异?
你好,这个问题的答案可能是由于在 Go 语言中,正则表达式引擎默认不包括换行符在 .
字符匹配中。这和 JavaScript 的默认行为是不同的。
在 Go 中,要匹配换行符,你需要使用 \s
匹配所有空白字符,包括空格、制表符、换页符等等,或者使用 [\f\n\r\t\v]
匹配特定的换行字符。
然而,在你的例子中,你试图匹配 \n\n
之间的文本,这可能需要一个稍微复杂的正则表达式。你可以尝试使用以下的正则表达式:
var matchMenu = regexp.MustCompile(`Contents\n\n((?:.(?!\n\n))*)\n\n`)
这个正则表达式使用了非贪婪的量词 *?
和否定前视 (?!...)
来匹配 \n\n
之间的文本。
然后你可以像之前那样使用 FindSubmatch
函数来获取匹配结果:
menuData := matchMenu.FindSubmatch(getContent())fmt.Printf("%#v\n", menuData)
这样应该能得到你想要的结果。希望这个答案能帮助你解决问题!
这是什么原理
麻烦请问用golang的正则怎么把p标签的文本内容取出来,谢谢 补充,上边代码只是html一部分,
根据下面的示例,我有一个正则表达式模式。 但是,作为一个一次性的派生,如果只有一个模式(匹配第一个实例的空白行&模式上方的一个空格),我可以让下面的内容匹配。 http://regex101.com/r/ey0ic7 但是,如果模式位于第一行,则没有匹配。
基本模式匹配 一切从最基本的开始。模式,是正则表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。例如: ^once 这个模式包含一个特殊的字符^,表示该模式只匹配那些以once开头的字符串。例如该模式与字符串"once upon a time"匹配,与"There once was
老师们怎么将这两个正则表达式合并成一个, 既能检查IPV4又能检查IPV6地址? 仅匹配ipv4或ipv6匹配都是正常的。 搞了好久搞不出来了... 请老师们指点一下。
本文向大家介绍js正则表达式惰性匹配和贪婪匹配用法分析,包括了js正则表达式惰性匹配和贪婪匹配用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js正则表达式惰性匹配和贪婪匹配用法。分享给大家供大家参考,具体如下: 在讲贪婪模式和惰性模式之前,先回顾一下JS正则基础: 写法基础: ①不需要双引号,直接用//包含 => /wehfwue123123/.test(); ②反斜杠\表示转义