【问题标题】:RegEx is matching to wide? [duplicate]正则表达式匹配广泛? [复制]
【发布时间】:2020-07-25 20:03:28
【问题描述】:

我有一个 html 字符串,我需要在其中获取 srchref 值,如果它们符合模式。模式是;

/myfolder/[gu-id]/[image,file]

gu-id 的模式为'65f2383b-de39-4a9c-8e8c-de1c06e469ca' 图片或文件可以是任何jpg、gif、pdf、doc、xlsx.png、txt、zip等。

我目前的正则表达式是这样的:((\/myfolder\/[({]?[a-fA-F0-9]{8}[-]?([a-fA-F0-9]{4}[-]?){3}[a-fA-F0-9]{12}[})]?\/?.*\.(?:png|jpg|pdf|gif|jpeg|xls|xlsx|word|doc|txt|zip)))

但是在一个包含多个文件的字符串中,它以最后一个结尾,作为第一个匹配的结尾——所以它只找到一个匹配,但终点是另一个文件。

如何使它匹配每个文件,而不仅仅是一个?

【问题讨论】:

标签: c# asp.net regex


【解决方案1】:

您可以匹配非空白字符\S*,而不是使用.*

作为一个小提示,如果您不使用捕获组进行后处理并且只希望匹配,您可以省略它们。字符类[-]? 中的单个连字符可以写成-?。正斜杠\/ 不需要转义

交替可以缩短一点到(?:png|pdf|gif|jpe?g|xlsx?|word|doc|txt|zip)

您可以将模式更新为:

/myfolder/[({]?[a-fA-F0-9]{8}-?(?:[a-fA-F0-9]{4}-?){3}[a-fA-F0-9]{12}[})]?/?\S*\.(?:png|pdf|gif|jpe?g|xlsx?|word|doc|txt|zip)

.NET Regex demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多