首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >regexp匹配“未在前面,除非后面有”

regexp匹配“未在前面,除非后面有”
EN

Stack Overflow用户
提问于 2012-01-16 03:53:40
回答 5查看 2.2K关注 0票数 2

示例输入字符串:

代码语言:javascript
复制
(F1 (F2 X (Y) Z) (F3 A B)

我想要匹配的是:\w+,它的前面没有(,除非后面还有)

在本例中:XYZAB

/\(\w+\)| \w+/是一个暂时的解决方案(我知道它稍后会给我带来问题),但由于它也与空白空间相匹配,它将在未来的道路上造成问题,特别是当它达到替换匹配的地步时。

我在负面展望方面做了一些实验,其形式是:

代码语言:javascript
复制
/(?!=\()\w+/

...but我似乎找不到一种方法将它与"not“结合起来。

我只想说清楚:

在这种情况下,匹配都是单个字母,但实际数据可能是多个字符,甚至可能不是alphanumeric.

  • No白空间或括号可以是返回的匹配的一部分。
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-16 03:58:45

试试这个:

代码语言:javascript
复制
(?<=[ (])\w(?=[ )])

在这里看到它的作用:http://regexr.com?2vnri

实际上,这可能就是你想要的:

代码语言:javascript
复制
(?<= )\w+(?=[ )])|(?<=\()\w+(?=\))

在这里看到它的作用:http://regexr.com?2vnro

票数 2
EN

Stack Overflow用户

发布于 2012-01-16 04:00:40

代码语言:javascript
复制
/(?<! [(\w] (?! \w+ \) ) ) \w+/x

代码语言:javascript
复制
/(?<! [(\w] ) \w+ | (?<= \( ) \w+ (?= \) )/x
票数 1
EN

Stack Overflow用户

发布于 2012-01-16 05:01:04

与其尝试将这些条件组合成正则表达式,您还可以简单地使用替换来删除已知错误的条件:

代码语言:javascript
复制
my $str = "(F1 (F2 X (Y) Z) (F3 A B)";
$str =~ s/\(\w+(?![)\w])//g;

即,任何开括号,后面跟着字母数字,而不是结束括号或更多字母数字。

那么提取字母数字就很简单了:

代码语言:javascript
复制
my @items = $str =~ /\w+/g;
say for @items;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8875608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档