当出现两个单词中的任何一个时,正则表达式停止匹配

Regex to stop matching when either of two words show up

我想在出现两个词 "directory" 或 "tag" 时停止捕捉。

文本案例 1:

"...input job: dentist directory job: hygenist </tag>"

文本案例2:

"...input job: dentist</tag>"

牙医是我要捕捉的。所以基本上我希望正则表达式在 "input job: " 之后开始匹配,并在字符串中出现 </tag>directory 时停止匹配。这是因为 </tag>directory 总是会出现在 dentist.

之后

我尝试过很多不同的东西。我最接近的是这个(它开始匹配但没有达到最终情况):

(?<=input job: )(\D*)(?= directory| <\/tag>)

如果我只使用其中一个最终案例,文本案例 1 就满足了:

(?<=input job: )(\D*)(?= directory)

如果我只使用另一个终端案例,文本案例 2 就满足了:

(?<=input job: )(\D*)(?= <\/tag>)

但是,我想涵盖这两种情况。我假设放置 or 条件 ("|") 会起作用,但它不起作用。

好的,我的问题是我没有使用惰性量词 *?(匹配尽可能少的字符)。我使用的是贪婪量词 *(匹配尽可能多的字符)。所以我尝试的一切都没有按预期执行。以下完美运行:

(?<=input job:)(\D*?)(?=directory|<\/tag>)

它将抓取 input job: 之后的所有内容,并在到达 directory</tag>

时停止