Golang Go语言中 (?m)<div id="ds_div">\n(.*</table>)</div> 与 (?m)<div id="ds_div">\n([\s\S]</table>)</div>

第一个行 第二个不行 有人知道原因吗

(?m)<div id="ds_div">\n(.*</table>)</div>
(?m)<div id="ds_div">\n([\s\S]</table>)</div>
package main
import ("regexp"
"fmt"
)
func main() {
s := `&lt;div id="ds_div"&gt;
						&lt;table border="0" width="100%"&gt;&lt;tbody&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;`
validId := regexp.MustCompile(`(?m).&lt;div id="ds_div"&gt;\n([\s\S])&lt;/table&gt;&lt;/div&gt;`)
ret2 := validId.FindStringSubmatch(s)
fmt.Printf("ret2:%v\nvalidId:%v\n", ret2, validId)
return
}


Golang Go语言中 (?m)
\n(.*)
与 (?m)
\n([\s\S])

更多关于Golang Go语言中 (?m)<div id="ds_div">\n(.*</table>)</div> 与 (?m)<div id="ds_div">\n([\s\S]</table>)</div>的实战教程也可以访问 https://www.itying.com/category-94-b0.html

6 回复

]*

更多关于Golang Go语言中 (?m)<div id="ds_div">\n(.*</table>)</div> 与 (?m)<div id="ds_div">\n([\s\S]</table>)</div>的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html



哎呀 忙晕了

golang 的正则官方库有些特性不支持的,用第三方库吧

看起来是在爬取 html 里的信息,为什么不直接使用 html parser 之类的库去解析?

求求你们不要用正则解析 xml 了,用些解析库吧
https://github.com/avelino/awesome-go 这里一堆,你们慢慢挑

在Go语言中,正则表达式(Regular Expressions)是一个强大的工具,用于字符串匹配、查找和替换等操作。针对你提到的两个正则表达式,我们可以从匹配模式和效率上进行简要分析。

  1. 正则表达式解释

    • (?m)<div id="ds_div">\n(.*?</table>)</div>

      • (?m):多行模式(multiline mode),使得^$分别匹配行的开始和结束,而不是整个字符串的开始和结束。
      • (.*?</table>):非贪婪匹配(non-greedy match),尽可能少地匹配字符直到遇到</table>
    • (?m)<div id="ds_div">\n([\s\S]</table>)</div>

      • ([\s\S]</table>):使用[\s\S]匹配任意字符(包括换行符),直到遇到</table>
  2. 差异与效率

    • 第一个表达式使用了非贪婪匹配,这通常更高效且更精确,因为它在找到第一个</table>时就停止匹配。
    • 第二个表达式使用[\s\S]来匹配任意字符,包括换行符,这在匹配大文本块时可能会稍显低效,因为它会一直匹配到最后一个</table>(如果存在多个),尽管在此特定上下文中,由于后面紧跟</table>,实际上效果与第一个相同。

总结:在大多数情况下,第一个表达式(非贪婪匹配)是更好的选择,因为它既准确又高效。

回到顶部