2012-06-13 137 views
1

这里的正则表达式的条件本身:不包括在正则表达式

/\.([^\.]*)/g 

但对于字符串name.ns1.ns2抓到.ns1和。 ns2值(这确实很有意义)。是否有可能只获得ns1ns2的结果?也许使用断言,nuh?

+0

为了澄清起见,你可以添加一些示例字符串与他们想要的匹配吗? – Wiseguy

+0

@Wiseguy它只需要在点之后捕获任何东西:'something.catch.catch' –

+0

哦,所以目前的匹配包括'.',但是你想排除'.'?这就是你的子模式。 – Wiseguy

回答

2

你有捕获组,使用它的值,但是你用你的语言来做。

JavaScript示例:

var list = "name.ns1.ns2".match(/\.([^.]+)/g); 
// list now contains 'ns1' and 'ns2' 

如果你可以使用lookbehinds(最现代的正则表达式的口味,但不是JS),你可以使用这个表达式:

(?<=\.)[^.]+ 

在Perl中,你也可以使用\K像这样:

\.\K[^.]+ 
0

你可以使用类似字符串分割的东西,它允许你将字符串分解成特定字符串(比如句点)吗?

目前尚不清楚您使用的是哪种语言,但几乎所有现代语言都提供了分割字符串的方法。例如,这个伪代码:

string myString = "bill.the.pony"; 
string[] brokenString = myString.split("."); 
+0

我没有遇到特别的问题,我很感兴趣如何用正则表达式来实现。 –

+0

@pyrate可以理解。 – kevin628

+0

无论如何谢谢你 –

1

我不是100%确定你要做什么,但我们走吧通过一些选项。

你的正则表达式:/\.([^\.]*)/g

(小提示:你不需要反斜杠字符类[ .. ].的前面,因为.失去它的特殊含义存在的话)

首先:匹配一个正则表达式原则上是一个布尔测试:“这个字符串是否匹配这个正则表达式”。你可能能够得到的关于字符串的哪部分与正则表达式的哪部分相匹配的其他信息完全取决于正在使用的任何环境中正则表达式的特定实现。所以,你的问题本质上取决于实现。

但是,在最常见的情况下,匹配尝试确实会提供额外的数据。你几乎总是得到匹配整个正则表达式的子字符串(在Perl 5中,它显示在$&变量中)。在Perl5兼容的正则表达式中,如果用正确的括号括住了正则表达式的一部分,您还需要添加匹配每个集合的子字符串(在Perl 5中,它们被放置在$1,$2等中)。因此,正如您所写,正则表达式通常会为您提供两个单独的结果:整个匹配的“.ns1”,“.ns2”等,以及“ns1”,“ns2”等。为子组匹配。你不应该改变表达式来获得后者的值;只是改变你如何访问比赛结果。然而,如果你想要,并且你的正则表达式引擎支持它们,你可以使用某些特性来确保整个正则表达式只匹配你想要的部分。一个这样的机制是向后看。正回顾后才会东西的回顾后表达式匹配后匹配:

/(?<\.)([^.]*)/ 

,将符合非周期的任何序列,但只有当他们来了一段时间后。