Regexp - 如何查找由两个特定字符包围的文本部分?

Bad*_*Cat 6 regex

我试图找出一个正则表达式替换特定字符包围的文本部分...看看这个例子:

\|(.+)\|
Run Code Online (Sandbox Code Playgroud)

它找到放在两条垂直线(|)之间的任何文本,如果它在其工作的文本中只有一次出现,但是如果有两个或更多,它将找到所有文本位于第一个找到的文本之间.最后找到了| ...

Lorem ipsum dolor sit amet, |consectetur| adipiscing elit. Aliquam nec |tortor lectus|. Nunc sodales ornare varius. Quisque pharetra porttitor ligula. 
Run Code Online (Sandbox Code Playgroud)

...但是在示例文本中,我只想找到'consectetur'和'tortor lectus'.如何改进regexp以排除中间的所有文本?

Kao*_*aos 8

+是贪心的.尝试*,它应该尽可能少地匹配(非贪婪).编辑:我脑子里充满了混乱.加一个?使它不贪婪:

\|(.*?)\|
Run Code Online (Sandbox Code Playgroud)

+也是如此:

\|(.+?)\|
Run Code Online (Sandbox Code Playgroud)

如果您需要+1中的一个或多个,请添加另一个点.(编辑:如果你有两个|下一个,可能不是一个好主意).

编辑2:添加了?使它不贪心

\|(..*?)\|
Run Code Online (Sandbox Code Playgroud)

.

接受的建议

可能有一个更好的方法,不匹配任何角色,但要匹配除|之外的所有,如:

\|([^|]+)\|
Run Code Online (Sandbox Code Playgroud)

然后你仍然可以拥有贪婪的+.