【发布时间】:2011-06-20 03:06:59
【问题描述】:
我整个上午都在为此苦苦挣扎。希望一些正则表达式大师可以引导我朝着正确的方向前进。基本上,我使用正则表达式来比较两个字符串值。应该对两个字符串应用相同的正则表达式,如果所有命名组中的所有值都匹配,我们认为字符串等价(此命名组检查在代码中完成)。
对于字符串,我有类似“jw-cst”的东西,需要与“cst”进行比较。我需要的正则表达式应该考虑这些等价的,因为之前和包括“-”的任何内容都不应该在命名组中捕获。
所以...
jw-cst -> 捕获组值 = "cst" cst -> 捕获组值 = "cst"
捕获组的名称无关紧要,我正在使用的应用程序只是遍历捕获的每个组,以确保它们匹配两个结果。
到目前为止,我有这个:
(?(?-).|.*)
但它似乎使用了第二个匹配条件......所以总是返回“jw-cst”而不仅仅是“cst”。如果我删除第二种选择 (.*),它将正确匹配...任何帮助将不胜感激。
【问题讨论】:
-
您正在处理的只有这种字符串吗?在这种情况下,一个简单的
/-?(.*)$/就足够了。但我敢肯定它更复杂。那么你能提供一个真实的字符串以及你期望匹配的内容吗? -
你需要给出好的输入和坏输入的具体和完整的例子。
-
一组字符串将全部为 2 或 3 个字符(首字母,即 BL 或 MRK),另一组字符串将与前一组相同(首字母,即 BL 或 MRK)或将是两个首字母的组合,永远不会更多(即 BL-MRK 或 DLN-MRK)。我将始终与第二组首字母匹配(即,如果字符串是 BL-MRK,我只对 MRK 部分感兴趣)。示例:1) ALK 2) ALK 捕获:ALK 1) BLK-CRS 2) CRS 捕获:CRS 1) DN-ELB 2) ELB 捕获:ELB 1) FN-GA 2) GA 捕获:GA
标签: regex