我想获取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,否则它会更灵活。