正则表达式 - 如何查找由两个特定字符包围的文本部分?

时间:2011-05-19 12:14:41

标签: regex

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

\|(.+)\|

它找到放置在两条垂直线(|)之间的任何文本,如果在它可以找到的文本中只出现一次这样的文本,但是如果有两个或更多它会找到第一个找到的文本之间的所有文本|最后找到了| ...

Lorem ipsum dolor sit amet, |consectetur| adipiscing elit. Aliquam nec |tortor lectus|. Nunc sodales ornare varius. Quisque pharetra porttitor ligula. 

...但是在示例文本中我只想找到'consectetur'和'tortor lectus'。如何改进正则表达式以排除其间的所有文本?

1 个答案:

答案 0 :(得分:8)

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

\|(.*?)\|

同样适用于+:

\|(.+?)\|

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

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

\|(..*?)\|

  

接受的建议

     

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

\|([^|]+)\|
     

然后你仍然可以贪婪+。