如何从正则表达式匹配中排除一些 url

how to exclude some url from a regex match

我有 3 种付款方式(在线、离线、余额),每种付款方式都有不同的 url 所以我使用正则表达式来匹配所有这些 url :

1- order/checkout/unpaid/done

2- order/checkout/paid/done?Authority=000000000000000000000000000039067905&Status=OK 3- order/checkout/paid/done?Status=OK

正则表达式:(.*?)完成

这个正则表达式匹配所有 url,但问题是它也匹配某些页面!关闭此产品页面:

/tork-完成r-motahari-德黑兰

有什么解决办法?

您可以使用

(.*)done($|[?])

关键是你需要匹配字符串末尾的done或者最后的?。该模式将匹配

  • (.*) - 任何 0+ 个字符,尽可能多,直到最后一次出现后续子模式
  • done - 文字子串 done
  • ($|[?]) - $(字符串锚点结尾)或文字 ?(在模式中可以写成 \?,要点是? 前面没有括号或 \ 表示 ?).[=36= 左侧的原子重复 1 次或 0 次]

请注意,如果您不使用捕获组值,则可以通过在 ( 之后添加 ?: 将组变为非捕获组。