正则表达式匹配或不匹配

时间:2018-04-06 06:52:48

标签: regex

我想写一个正则表达式来捕获二次方程的解,即:

匹配 x=1 or x=2x=2 or x=1

但不匹配 x=1 or x=1x=2 or x=2

我试过了 x=[12] or x=[21]

但很明显[12] = [21]因为那个顺序并不重要。

我尝试捕获第一个值并使用它: x=([12]) or x=[\1]

这让我对我想要的东西不予理睬。

我的想法是我需要匹配[12]而不是\ 1。可以这样做吗?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:2)

您可以在第一个字符类上使用捕获组,并使用包含对该Group 1值的反向引用的负向前瞻限制第二个字符类:

x=([12]) or x=(?!\1)[21] 

或许,单词边界也会有所帮助(如果你想确保只避免在1中匹配1而在1中不匹配100

x=([12]) or x=(?!\1\b)[21]\b

要匹配任何数字,请将[21]替换为[0-9]\d

<强>详情

  • x= - 文字子字符串
  • ([12]) - 第1组:12\d+[0-9]+以匹配任何1位数字)
  • or - or用空格括起来
  • x= - 文字子字符串
  • (?!\1\b)[21]\b - 21(替换为[0-9]+\d+以匹配任何1+位数)不等于捕获的值第1组(由于(?!\1\b)负向前瞻)。

请注意,如果您的数字可以粘贴到字词上,则必须将\b字边界替换为(?!\d)负前瞻(当前位置之后没有数字)。

请参阅regex demo here

答案 1 :(得分:2)

试试这个正则表达式:

x=(\d+) or x=(?!\1)\d+

<强> Click for Demo