我需要一个正则表达式来查找首字母缩略词及其定义。 我尝试匹配大写英文字母序列,然后是以这些字母开头的单词。例如:
欧盟欧盟
我需要匹配以下"语法":
<Capital letters> <Tabs or spaces>
<Optional "(">
<Optional tabs or spaces> <Matching definition words> <Optional tabs or spaces>
<Optional ")">
以下命令查找当前目录中所有文件中的所有首字母缩写词(不短于2个字母):
grep -aRoP '([A-Z])([A-Z])([A-Z])?([A-Z])?([A-Z])?([A-Z])?[ \t]+\(?[ \t]*\1[a-z]* \2[a-z]*(?(3) \3[a-z]*)(?(4) \4[a-z]*)(?(5) \5[a-z]*)(?(6) \6[a-z]*)[ \t]*\)?' .
但它限制了首字母缩略词的长度(最多6个字符)。 是否有可能以更紧凑的方式重写正则表达式,消除对首字母缩略词长度的限制?可能这可以用递归模式完成。
答案 0 :(得分:0)
$regex = '/(([A-Z])((?2)+))\s+\(?(((?:\s+)?(?3)\w+)(?:\s+)?(?4)?)\)?/';
$acronyms = array('EU European Union', 'HTTP Hyper Text Transfer Protocol', 'NOT AN ACRONYM');
foreach ($acronyms as $subject) {
$result = preg_match($regex, $subject, $matches);
if ($result && $matches[0] === $subject) {
echo "pass\n";
} else {
echo "fail\n";
}
}
这应该做你想要的。