当出现两个单词中的任何一个时,正则表达式停止匹配
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>
时停止
我想在出现两个词 "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>