示例输入字符串:
(F1 (F2 X (Y) Z) (F3 A B)我想要匹配的是:\w+,它的前面没有(,除非后面还有)
在本例中:X、Y、Z、A和B
/\(\w+\)| \w+/是一个暂时的解决方案(我知道它稍后会给我带来问题),但由于它也与空白空间相匹配,它将在未来的道路上造成问题,特别是当它达到替换匹配的地步时。
我在负面展望方面做了一些实验,其形式是:
/(?!=\()\w+/...but我似乎找不到一种方法将它与"not“结合起来。
我只想说清楚:
在这种情况下,匹配都是单个字母,但实际数据可能是多个字符,甚至可能不是alphanumeric.
发布于 2012-01-16 03:58:45
试试这个:
(?<=[ (])\w(?=[ )])在这里看到它的作用:http://regexr.com?2vnri
实际上,这可能就是你想要的:
(?<= )\w+(?=[ )])|(?<=\()\w+(?=\))在这里看到它的作用:http://regexr.com?2vnro
发布于 2012-01-16 04:00:40
/(?<! [(\w] (?! \w+ \) ) ) \w+/x或
/(?<! [(\w] ) \w+ | (?<= \( ) \w+ (?= \) )/x发布于 2012-01-16 05:01:04
与其尝试将这些条件组合成正则表达式,您还可以简单地使用替换来删除已知错误的条件:
my $str = "(F1 (F2 X (Y) Z) (F3 A B)";
$str =~ s/\(\w+(?![)\w])//g;即,任何开括号,后面跟着字母数字,而不是结束括号或更多字母数字。
那么提取字母数字就很简单了:
my @items = $str =~ /\w+/g;
say for @items;https://stackoverflow.com/questions/8875608
复制相似问题