2016-03-28 321 views
5

我有正則表達式字符串,我想分類,這是正則表達式有固定的前綴還是沒有。正則表達式固定前綴

例如:

abcdef.*g[0abc]{0,5}hi具有前綴abcdef

]1234vac.*12345已前綴]1234vac

(abc)+123具有前綴abc

[A-z]+12345不具有固定的預修復(它從A-Z的未知數量的符號開始)

我真的明白這個問題不會以一般形式解決嗎?

+0

你想從這些字符串中獲取前綴嗎? – Shafizadeh

+0

@Shafizadeh,是 –

+0

,前綴是以'。'結尾的任何內容? – Divisadero

回答

1

試試這個正則表達式:

^(
    (     # GENERAL before . (Dot) 
    (?!\w+\?)    # DO NOT MATCH if contains ? 
    [\w\]\)]+    # Word, ] or) characters 1 or more times 
)| 
    (?:\((\w+)\))|  # Words in between BRACKETS() 
    (     # BEFORE . (Dot) with ?, * or + 
     [\w\]\)]+    # Select Characters 
     (?![?*+])    # DO NOT select last character if there is ?, * or + after it 
) 
) 

Live Demo on Regex101

告訴我不工作的任何其他的例子,我會改變這種情況。我已經在你的問題的所有例子進行了測試,並且評論

另外,怎麼可能拿出一個問題這個複雜! ;)

+0

棒極了!您的解決方案並不涵蓋所有情況,但它看起來像我想要的。 –

+0

@DenisGavrus如果你告訴我它沒有覆蓋什麼,我可以改變它。另外,如果它回答了你的問題,你是否介意接受它? – Druzion

+0

我認爲它通常使用正則表達式解決這個問題的機會不大,因爲它有很多情況下,逃脫了特殊字符和其他(它會是完美的前綴'http:\/\/stackoverflow \ .com'從正則表達式'http:\/\/stackoverflow \ .com \ /.*?\/[\ d] +'但我明白這幾乎不可能通過正則表達式(我的任務不是解析url,它只是一個例子))例如,你的解決方法是從正則表達式'abc'(abc)* ',但它不是前綴,因爲'(abc)?'也會重複原因* - {0,}。但是,無論如何,如果我沒有得到任何其他答案,我會在晚些時候接受你的回答。 –