Regex matching 2 similar phrases -


i trying match automatically grade student's answer question correct answer is:

read , execute owner , read 

the order of answer doesn't matter so

read , read , execute owner 

is acceptable answer. fluff (and, for) doesn't matter looking either of these

read execute owner read read read execute owner 

i can regex accept either answer

(?=.*read.*execute.*owner)(?=.*read.*everyone) 

but accepts more answer wrong "read execute owner read execute everyone". tried using negative look-ahead "execute" everyone, still matches "execute" owner , says no regex match.

is there way accomplish trying do? thanks.

just make and/for optional.

 # (?=.*(\bread(?:\s+and)?\s+execute(?:\s+for)?\s+owner\b))(?=.*(\bread(?:\s+for)?\s+everyone\b))   (?=       .*        (                             # (1 start)            \b read                           (?: \s+ , )?            \s+ execute             (?: \s+ )?            \s+             owner \b        )                             # (1 end)  )  (?=       .*                  (                             # (2 start)            \b read                            (?: \s+ )?            \s+ \b        )                             # (2 end)  ) 

edit: allow optionally any words between the
key words excluding keywords between keywords.
-

 #  (?=.*(\bread(?:\s+(?:(?!\b(?:read|execute|owner|everyone)\b).)+?)?\s+execute(?:\s+(?:(?!\b(?:read|execute|owner|everyone)\b).)+?)?\s+owner\b))(?=.*(\bread(?:\s+(?:(?!\b(?:read|everyone|execute|owner)\b).)+?)?\s+everyone\b))   (?=       .*        (                     # (1 start)            \b read            (?:                 # optional words between keywords -                 # not of or other ones keywords                 \s+                  (?:                      (?!                           \b                            (?:                                read                  #                             |  execute               #                             |  owner                 #                             |               # other                           )                           \b                       )                      .                  )+?            )?            \s+ execute            (?:                 # optional words between keywords                 \s+                  (?:                      (?!                           \b                            (?:                                read                             |  execute                             |  owner                             |                            )                           \b                       )                      .                  )+?            )?            \s+             owner \b        )                     # (1 end)  )  (?=       .*        (                     # (2 start)            \b read            (?:                 # optional words between keywords -                 # not of or other ones keywords                 \s+                  (?:                      (?!                           \b                            (?:                                read                  #                             |               #                             |  execute               # other                             |  owner                 # other                           )                           \b                       )                      .                  )+?            )?            \s+ \b        )                     # (2 end)  ) 

Comments