正则表达式管道需要首先匹配

时间:2016-05-04 09:42:45

标签: regex

我的正则表达式是这样的:

      .*(kgrj4e|\*)[^:]*:([^;]*);?

'kgrj4e'部分是用户ID并且是动态的。 PR ....部分是打印机。如果找不到用户标识,我想要默认打印机(PR12346)。

对于下面的第一个测试字符串,我希望结果为PR12345,但我得到PR12346

snljoe,snlaks,kgrj4e,snlbla:PR12345; *:PR12346

注意:用户snljoe,snlaks和snlbla只是示例,可能完全不同。事实上,用户列表可以更长或更小。

对于下面的第二个测试字符串,我希望结果为PR12346

snljoe,snlaks,snlbla:PR12345; *:PR12346

如何修复正则表达式,以便两个测试字符串都给出预期的结果?

1 个答案:

答案 0 :(得分:1)

您可以通过搜索获取​​号码并替换:

搜索:^(?:(?!.*,kgrj4e(?:[;,])).*\*:(\w+)|.*?(PR\d+).*)
替换为:$1$2

请参阅this demo

我假设kgrj4e是用户定义的值,字符串中应该缺少该值以匹配上一个打印机值。如果存在,则返回第一个打印机值。