2011-12-14 50 views

回答

2
<?php 

$string = '(en) English'; 

preg_match('#\((.*?)\)#is', $string, $matches); 

echo $matches[1]; # en 

?> 

$matches[0]将包含在()之间这种情况下(.*?)整个比赛串,$matches[1]将第一组。

+0

更具可读性是回顾后/提前在我看来。 – Powertieke 2011-12-14 15:02:40

0

这应该做的工作。

"/\(([a-z]+)\)/i" 
0

最简单的方法是获得"/\(([a-z]+)\)/i"并使用捕获组来获得你想要的。

否则,您必须进入向前看,看屁股

0

你可以使用一个捕获组和其他人一样提出

OR

你可以让你的对手只有当你的对手是检查前面有“(”和后面跟着“)”。它被称为Lookahead和lookbehind。

"/(?<=\().[a-z]+(?=\))/i" 
1

什么是你的正则表达式的好处,我认为它的错误。

其次给你一个替代捕获组的答案(这非常好!),这里是使用lookbehead和lookahead来解决问题。

(?<=\()[a-z]+(?=\)) 

看到它here on Regexr

的窍门在这里,那些lookarounds不中的字符一致里面,他们只是检查它们是否存在。所以这些字符不包含在结果中。背后断言

(?<=\()正面看上去,领先其位置之前检查字符(

(?=\)正面看上去断言,检查字符(领先于其位置的

相关问题