Regexp: (.//)?(((child::)?((ic*:)?(ic*|*)))|.)(/(((child::)?((ic*:)?(ic*|*)))|.))*(|(.//)?(((child::)?((ic*:)?(ic*|*)))|.)(/(((child::)?((ic*:)?(ic*|*)))|.))*)* a: Ok a12/b312/b312/b312/b312/b312/b312/b312/b312/b312/b312/b312/b3: Ok

: Ok

a|b: Ok .//a:b: Ok a/b/c: Ok a /b: Ok a: b: c:*: Ok child::a/child::b:*: Ok child::a/child::b:*|a /b|.//a:b: Ok 1: Fail 1ab: Fail a:1: Ok @a: Fail ancestor::a: Ok Regexp: (.//)?(((child::)?(([i-][c-]*:)?([i-][c-]*|*)))|.)(/(((child::)?(([i-][c-]*:)?([i-][c-]*|*)))|.))*(|(.//)?(((child::)?(([i-][c-]*:)?([i-][c-]*|*)))|.)(/(((child::)?(([i-][c-]*:)?([i-][c-]*|*)))|.))*)* a: Ok a12/b312/b312/b312/b312/b312/b312/b312/b312/b312/b312/b312/b3: Ok

: Ok

a|b: Ok .//a:b: Ok a/b/c: Ok a/*/b: Ok a:/b:/c:*: Ok child::a/child::b:*: Ok child::a/child::b:*|a/*/b|.//a:b: Ok 1: Fail 1ab: Fail a:1: Fail @a: Fail ancestor::a: Fail