i want match string may contain type of character before match, or match may begin @ beginning of string (same end of string).
for minimal example, consider text n.b., i'd match either @ beginning of line , end of line or between 2 non-word characters, or combination. easiest way use word boundaries (\bn\.b\.\b), doesn't match; similar cases happen other desired matches non-word characters in them.
i'm using (^|[^\w])n\.b\.([^\w]|$), works satisfactorily, match non-word characters (such dashes) appear before , after word, if available. i'm doing in grep, while pipe output sed, i'm using grep's --color option, disabled when piping command (for obvious reasons).
edit: \k option (i.e. (\k^|[^\w])n\.b\.(\k[^\w]|$) seems work, discard color on match within output. while could, again, invoke auxiliary tools, i'd love if there quick , simple solution.
edit: have misunderstood \k operator; removes text match preceding use. no wonder failing color output.
if you're using grep, must using -p option, or lookarounds , \k throw errors. means have negative lookarounds @ disposal. here's simpler version of regex:
(?<!\w)n\.b\.(?!\w) also, aware (?<=...) , (?<!...) lookbehinds, , (?=...) , (?!...) lookaheads. wording of title suggests may have gotten mixed up, common beginner's mistake.