我將在JavaScript中實現RegExp。RegExp代碼,用於在字符串中查找等距字符
我認爲解釋這個最好的方法就是一個例子。如果搜索字符串是
'abc'
和草垛是
'auaisdgbbhbcsccddciubbffs'
的模式需要打:
'[a]uaisdg[b]bhbcsc[c]ddciubbffs' and
'au[a]isdgb[b]hbcsc[c]ddciubbffs'
,並返回這些字符的位置...
甚至可以使Regex做出這樣的事情嗎?
我將在JavaScript中實現RegExp。RegExp代碼,用於在字符串中查找等距字符
我認爲解釋這個最好的方法就是一個例子。如果搜索字符串是
'abc'
和草垛是
'auaisdgbbhbcsccddciubbffs'
的模式需要打:
'[a]uaisdg[b]bhbcsc[c]ddciubbffs' and
'au[a]isdgb[b]hbcsc[c]ddciubbffs'
,並返回這些字符的位置...
甚至可以使Regex做出這樣的事情嗎?
鑑於我們不知道你正在使用的編程語言,這是不可能提供在這一點上一個明確的答案。
這就是說,我不知道任何正則表達式構造會允許這種匹配。
如果我理解正確,你想找到一個'a',例如後面跟着一個'b'六個字符。然後,由於'b'在'a'之後出現了六個字符,所以您希望在'b'之後找到一個'c'六個字符。本質上,你想要backreferences,但你只想匹配反向引用的長度而不是實際的文本。我不認爲這是正常表達式可能的。
有可能是一些正則表達式的實現有一個不尋常的結構允許這個,所以瞭解你的平臺會有所幫助。
UPDATE
JavaScript有least powerful regex實現在那裏的一個。我認爲你不能用純正則表達式來做到這一點。您需要編寫一些額外的代碼(並且我會誠實地爲您的簡單示例推薦一種「僅限代碼」方法)。
如果我正確理解你的問題,這樣的正則表達式可能的工作:
"(a).{6}(b).{6}(c).{6}.*"
你想加入羣1,2,和3
既然你沒有指定語言,考慮蟒蛇下面的示例中使用字符串你給上面:
>>> q = re.compile(r"(a).{6}(b).{6}(c)")
>>> s1 = 'auaisdgbbhbcsccddciubbffs'
>>> s2 = 'auaisdgbbhbcsccddciubbffs'
>>> res1 = q.findall(s1)
>>> res2 = q.findall(s2)
>>> print res1, res2
[('a', 'b', 'c')] [('a', 'b', 'c')]
>>> for r in res1:
print ''.join(r)
abc
>>> for r2 in res2:
print ''.join(r)
abc
+1'6'是一個任意的數字,但是如果正則表達式是在for循環中構造的並且應用了多次不同寬度的數據,它可能對OP有用。效率不高,但可以完成工作。 – JDB
在Perl中,你可以返回使用$ + [1]等
匹配的位置例如
$x=qqqafkewibslspcfjfjfj;
$x=~/(a).*(b).*(c)/;
print 'a was at: ' . $+[1] . ' b was at: ' . $+[2] . ' c was at:' . $+[3];"
給我:
a was at: 4 b was at: 10 c was at:15
OP從此更新了他/她的問題以表明JavaScript是語言。 – JDB
哪種語言,你試過了什麼? – Anirudha
我不能得到你想要的正則表達式只用你的例子實現的規則。你能提供一個不太複雜的嗎?例如,什麼應該「azbzcz」,「abc」,「aabbcc」和「aazbzcc」匹配? – sp00m
我不認爲正則表達式本身可以做到這一點,除非你知道字符之間的最大空間(然後你可以做一個冗長,詳盡,醜陋的正則表達式)。更好的方法可能是解析字符串,計算第一個和第二個匹配字母之間的字符,然後搜索第三個字符。 – iamnotmaynard