我想写一个正则表达式来捕获二次方程的解,即:
匹配
x=1 or x=2
和x=2 or x=1
但不匹配
x=1 or x=1
和x=2 or x=2
我试过了
x=[12] or x=[21]
但很明显[12] = [21]因为那个顺序并不重要。
我尝试捕获第一个值并使用它:
x=([12]) or x=[\1]
这让我对我想要的东西不予理睬。
我的想法是我需要匹配[12]而不是\ 1。可以这样做吗?如果是这样,怎么样?
答案 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组:1
或2
(\d+
或[0-9]+
以匹配任何1位数字) or
- or
用空格括起来x=
- 文字子字符串(?!\1\b)[21]\b
- 2
或1
(替换为[0-9]+
或\d+
以匹配任何1+位数)不等于捕获的值第1组(由于(?!\1\b)
负向前瞻)。请注意,如果您的数字可以粘贴到字词上,则必须将\b
字边界替换为(?!\d)
负前瞻(当前位置之后没有数字)。
请参阅regex demo here。
答案 1 :(得分:2)