2016-08-23 117 views
0

String to be matched = "AAA/up to eight upper case letters/AAA" : ex1 : AAA/BB/AAA ex2 : AAA//AAA ex3: AAA/BBCCDDEEFF/AAA
正則表達式的貪婪範圍

我怎樣才能在中間搭配0-8個大寫字母串(即之間的斜線)?

我試圖regex : AAA/(?!(.*[a-z].*)[A-Z]{0,8})/AAA

但它不符合上述任何字符串。
(正則表達式AAA/[A-Z]{0,8}/AAA確實匹配上面的字符串,但它小寫字母也很相配 ex: AAA/bb/AAA

+1

添加Notepad ++標記,這非常重要。 –

回答

6

您的原始AAA/[A-Z]{0,8}/AAA是正確的,但你得到了「不區分大小寫」正則表達式修飾符設置某個正則表達式外面,所以你匹配小寫字母以及。 (你檢查「區分大小寫」在記事本複選框++?)

您可以將正則表達式(或表達式的一部分)的情況下與(?-i)結構敏感:

(?-i)AAA\/[A-Z]{0,8}\/AAA 

演示:https://regex101.com/r/aS2iW8/1

+0

是的!這是問題。謝謝 – Dinushan

1

你可以這樣做:

^A{3}/([A-Z]{0,8})/A{3}$ 

現在匹配組\1會讓你有什麼內部的兩個/秒。

Demo

+0

嗯..由於某種原因這匹配字符串像「AAA/BB/AAA」(至少在記事本+ +) – Dinushan

+0

沒有這個正則表達式不能匹配AAA/Bb/AAA' – anubhava

+0

@anubhava在某些情況下,它可以。例如。當不區分大小寫模式打開時。 –