KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I've been reading "Mastering Regular Expressions" by Friedl and trying to devise a common non-greedy pattern expression for a string that is delimited by a word. Starting from basics where the delimited word is just a single character ' a ' the expression: sed -r 's/([^a]*)(a)/\ (1)\1(2)\2(ALL)&(END)/g' <<<"xaxxaxxxaxxx...aa..." (1)x(2)a(ALL)xa(END) (1)xx(2)a(ALL)xxa(END) (1)xxx(2)a(ALL)xxxa(END) (1)xxx...(2)a(ALL)xxx...a(END) (1)(2)a(ALL)a(END)... from which the pattern (with reference to Friedl) might be: [ normal* closing ] Moving on to a real multi-character ' ab ' delimiter: sed -r 's/([^a]*)((a[^b]*)*)(ab)/\ (1)\1(2)\2(3)\3(4)\4(ALL)&(END)/g' <<<"xabxxabxxxabxxx...abxxx...aabxxx...axxx...aaabxaabaxabaxaxabxaxaabxxaaabaaxxab..." (1)x(2)(3)(4)ab(ALL)xab(END) (1)xx(2)(3)(4)ab(ALL)xxab(END) (1)xxx(2)(3)(4)ab(ALL)xxxab(END) (1)xxx...(2)(3)(4)ab(ALL)xxx...ab(END) (1)xxx...(2)a(3)a(4)ab(ALL)xxx...aab(END) (1)xxx...(2)axxx...aa(3)axxx...aa(4)ab(ALL)xxx...axxx...aaab(END) (1)x(2)a(3)a(4)ab(ALL)xaab(END) (1)(2)ax(3)ax(4)ab(ALL)axab(END) (1)(2)axax(3)axax(4)ab(ALL)axaxab(END) (1)x(2)axa(3)axa(4)ab(ALL)xaxaab(END) (1)xx(2)aa(3)aa(4)ab(ALL)xxaaab(END) (1)(2)aaxx(3)aaxx(4)ab(ALL)aaxxab(END)... from which the pattern might be: [ normal* (special*)* closing ] For the subsequent ' abc ' delimiter the special expression can be extended to: (a[^b]*)*(ab[^c]*)* Is this correct? Can it be proved? Can the special expression be simplified? Are there better/more efficient expressions for this? n.b. I'm not using perl's non-gr
Tags (comma-separated)
Save Edits
Cancel