我想获取familyId,并且在compar / produ.aspx之间还有一个选择。我使用正则表达式:

\ / selector /(比较+ |产品+)。aspx \?famiid =(\ d {2})\&produ = \ d {2}

符合:
/selector/comparioPage.aspx?famiid=32&produ=40

/selector/productCust.aspx?famiid=32&produ=40

然后我获得了familyId作为第二个匹配项。

实际上,我必须使用()来使替代方案成为可能(比较或生产)。问题是我不想在比赛组中获得比较或产品。

但是,如果删除(),则正则表达式的行为会有所不同:/ selector /不是选择的一部分:(

如何摆脱()而仅获取familyId?

谢谢

最佳答案

您可以使用以下语法指定non-capturing group(?:...)

因此您的模式变为(?:compar.+|produ.+)

目前尚不清楚为什么不使用页面的全名,除非存在其他具有相同前缀的页面。如果是这样,更好的模式可能是:

@"/selector/(?:compar|produ)[^.]+\.aspx\?famiid=(\d+)&produ=\d+";


通过使用[^.]+,它将匹配除句点以外的所有内容。另外,为什么将数字限制为两位?如果有一个或多个怎么办?除非您打算将\d+限制为长度为2的ID,否则它会更灵活。

10-04 12:24