2012-07-28 165 views
0

请帮我找到的匹配:正则表达式边界

<ptext>Any Sentence/tags goes here</ptext> 

我现在的正则表达式是:

\<ptext\>\b.+\b\</ptext\> 

但是,如果我将加倍,例如:

<ptext>Any Sentence/tags goes here</ptext> <ptext>Any Sentence/tags goes here</ptext> 

我正则表达式将匹配ptext到最后一个字体

我怎样才能分开,所以我会在我给出的例子中匹配两(2)个匹配。感谢你的帮助。

+0

你需要指定它应该是不贪。 – 2012-07-29 00:01:29

+0

你可以使用某种类型的XML解析器吗? – 2012-07-29 00:01:39

+0

不,这是我关于正则表达式的任务,所以我们不能使用XML解析器。谢谢 – neo 2012-07-29 00:05:31

回答

4

这是一个对().+?会派上用场。尝试...

\<ptext\>\b(.+?)\b\</ptext\> 

这样做有两件事。首先,本身使用的括号不会与OR语句(like|this)混淆,将专门在括号内返回,而不一定是所有内容。其次,“懒惰”.+?将匹配1个或更多字符,直到第一个匹配,而不是最后一个匹配成功。这样,它应该只捕获每一组项目,而不是整个文件。

也不知道\b是否适合您的情况,FYI。因此,我建议......

\<ptext\>(.+?)\</ptext\>

例如,下面的代码应该返回......

Array[0] = "This is a sentence" 
Array[1] = "Here's another one." 
+1

谢谢你!这是我正在寻找的答案。对不起,作为一个新手。有时候我的问题非常明显。 :) – neo 2012-07-29 00:12:02

+0

没关系。我已经连续两年写RegEx,所以不觉得太糟糕......我当时不太了解,而且我还在学习。 – Jonathan 2012-07-29 00:13:41

2

使用非贪婪量词:

<ptext>.+?</ptext> 
+0

那正则表达式是我第一次尝试的,但它只匹配1,直到最后 – neo 2012-07-29 00:05:01

+1

@ jomskie19:不,它在加号后有一个问号。相信我,它的工作原理... – Ryan 2012-07-29 00:09:27