如何只获取“()”中的文字
例如,从“(en)English”我只想要“en”。
我写了这个模式"/\(.[a-z]+\)/i"
,但它也得到了“()”;
提前致谢。
答案 0 :(得分:2)
<?php
$string = '(en) English';
preg_match('#\((.*?)\)#is', $string, $matches);
echo $matches[1]; # en
?>
$matches[0]
将包含完整匹配字符串,$matches[1]
将首先分组,在这种情况下(.*?)
位于(
和)
之间。
答案 1 :(得分:1)
你的正则表达式中的点是什么有用的,我认为它是错误的。
其次是给你一个替代捕获组的答案(这非常好!),这里是使用lookbehind和lookahead进行解决。
(?<=\()[a-z]+(?=\))
这里的诀窍是,那些外观与里面的人物不匹配,他们只是检查它们是否在那里。所以这些字符不包含在结果中。
(?<=\()
积极看待断言,在其位置之前检查字符(
(?=\)
积极向前看断言,在其位置前检查角色(
答案 2 :(得分:0)
那应该做的。
"/\(([a-z]+)\)/i"
答案 3 :(得分:0)
最简单的方法是获取"/\(([a-z]+)\)/i"
并使用捕获组获取您想要的内容。
否则,你必须展望未来,看看背后
答案 4 :(得分:0)
您可以像其他人一样使用捕获组
OR
您只能检查匹配是否以“(”后跟“)”开头。它被称为Lookahead和lookbehind。
"/(?<=\().[a-z]+(?=\))/i"