首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >perl正则表达式以获得逗号而不是圆括号或嵌套括号

perl正则表达式以获得逗号而不是圆括号或嵌套括号
EN

Stack Overflow用户
提问于 2020-01-09 11:48:14
回答 2查看 378关注 0票数 2

我有一个逗号分隔字符串,我想匹配每个逗号不在括号(括号保证是平衡的)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a   ,   (b)  ,   (d$_,c)    ,     ((,),d,(,))

A和(b),(b)和(d$,c),(d$,c)和((,),d,(,))之间的逗号应该匹配,但不应该在(d$_,c)或((,),d,( ))中匹配。

注意:最后,我想用这些逗号分隔字符串。

它尝试了来自这里的regex:这里,但它只适用于非嵌套括号。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-09 12:33:32

这方面的单个正则表达式非常复杂,很难维护或扩展。下面是一种迭代解析器方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use strict;
use warnings;

my $str = 'a   ,   (b)  ,   (d$_,c)    ,     ((,),d,(,))';

my $nesting = 0;
my $buffer = '';
my @vals;
while ($str =~ m/\G([,()]|[^,()]+)/g) {
  my $token = $1;
  if ($token eq ',' and !$nesting) {
    push @vals, $buffer;
    $buffer = '';
  } else {
    $buffer .= $token;
    if ($token eq '(') {
      $nesting++;
    } elsif ($token eq ')') {
      $nesting--;
    }
  }
}
push @vals, $buffer if length $buffer;

print "$_\n" for @vals;

您可以使用解析器::MGC更抽象地构造这种解析器。

票数 1
EN

Stack Overflow用户

发布于 2020-01-09 11:50:44

你可以用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(\((?:[^()]++|(?1))*\))(*SKIP)(*F)|,

regex演示

详细信息

  • (\((?:[^()]++|(?1))*\)) -捕获组1:匹配平衡括号之间的子字符串:
    • \( -a ( char
    • (?:[^()]++|(?1))* -除()或整个Group 1模式外,1+字符的出现次数为零或更多次(由于这里需要的regex子程序 (?1),因为只递归了整个正则表达式的一部分)
    • \) -a ) char.

  • (*SKIP)(*F) -省略找到的匹配,然后从匹配结束开始下一个搜索。
  • | -或
  • , -匹配嵌套括号外的逗号。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59671144

复制
相关文章
Perl正则表达式:字符与字符集
正则表达式语言由两种基本字符类型组成:原义文本字符和元字符(metacharacter)。原义文本字符也即要匹配的实际文本字符或者空格,而元字符是一个或一组代替一个或多个字符的字符,可以用来进行模糊匹配。常用的元字符及其表达式的含义如下表所示:
SYSU星空
2022/05/05
1.2K0
Perl正则表达式:字符与字符集
正则表达式详解
正则表达式是烦琐的,但是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。只要认真去阅读这些资料,加上应用的时候进行一定的参考,掌握正则表达式不是问题。
黄规速
2022/06/30
1.4K0
正则表达式详解
Perl正则表达式(2) – 用正则表达式进行匹配
到目前为止,我们都是讲正则表达式的内容写在一对斜线内,如/fred/。但其实这是 m// 的简写,其中m代表match,和之前看到的 qw// 类似,我么可以自行选择用于保卫内容的一堆字符作为边界,所以上面这个例子可以改写为m{fred},m[fred],m!fred!等。
全栈程序员站长
2022/08/31
2.1K0
perl 正则表达式 匹配字符串 或逻辑
perl正则表示式的备忘 http://www.runoob.com/perl/perl-regular-expressions.html
全栈程序员站长
2022/08/30
6580
浅析JavaScript正则表达式
  正则表达式是一个描述字符模式的对象。JavaScript的RegExp类表示正则表达式,String和RegExp都定义了方法,后者使用正则表达式进行强大的模式匹配和文本检索与替换功能,JavaScript的正则表达式语法是Perl5的正则表达式语法的大型子集
Jack Chen
2018/09/14
1.6K0
浅析JavaScript正则表达式
漫话:为什么键盘以QWER排列,而不是ABCD?
字母被敲击时,弹簧把这个字母对应的一根金属字杆弹到纸上,这样就印上了一个字。松开时,要靠弹簧把字杆弹回原位。
IT阅读排行榜
2020/07/09
1.6K0
漫话:为什么键盘以QWER排列,而不是ABCD?
括号的最大嵌套深度
如果字符串满足以下条件之一,则可以称之为 有效括号字符串**(valid parentheses string**,可以简写为 VPS):
利刃大大
2023/04/12
2990
Perl正则表达式:正则匹配
我们已知在Perl中正则表达式被称为模式,这种模式(也即正则表达式)可以放在由成对符号(例如()、<>、{}等)或者一对不成对的符号(例如//、!!、^^等)组成的界定符内,并在界定符前用小写字母指定模式的种类。当然我们不希望界定符和正则表达式的符号有所冲突(如果实在有冲突可以使用反斜杠转义),事实上最常用的界定符为双斜杠//。在Perl中有很多处理模式,其中最简单的为匹配模式m//,或者也可以理解为查找模式。由于正则表达式本身就有匹配的含义,以双斜杠作为定界符时m可以省略。其他处理模式详见下一小节。
SYSU星空
2022/05/05
4.2K0
Perl正则表达式:正则匹配
GNU C之圆括号套花括号(表达式中的复合语句)
该文介绍了GNU C中圆括号套花括号的复合语句,并举例说明。
雷大亨
2018/01/01
2.2K0
GNU C之圆括号套花括号(表达式中的复合语句)
JavaScript立即执行函数的解释分析(3)—谈谈圆括号()
前两篇文章,我们似乎已经明白为什么,立即执行函数要那样写了,这次为了能更加深入理解,我们来说说圆括号的事。
FEWY
2019/05/26
8010
好物分享第13弹:正则表达式简明学习指南
根据正则表达式 – 语法 | 菜鸟教程 (runoob.com)[1] 描述:正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
北野茶缸子
2021/12/17
1.2K0
好物分享第13弹:正则表达式简明学习指南
[日常] 正则表达式 小括号() 中括号[] 大括号{}
!preg_match('/^[a-zA-Z0-9]{2,16}$/') 只允许2~16位大小写字母及数字  
唯一Chat
2019/09/10
3.3K0
R语言︱文本(字符串)处理与正则表达式
处理文本是每一种计算机语言都应该具备的功能,但不是每一种语言都侧重于处理文本。R语言是统计的语言,处理文本不是它的强项,perl语言这方面的功能比R不知要强多少倍。幸运的是R语言的可扩展能力很强,DNA/RNA/AA等生物序列现在已经可以使用R来处理。
悟乙己
2019/05/26
4.3K0
Perl正则表达式详解[通俗易懂]
这里之所以加一个g修饰符是因为perl在进行全局匹配时,会记住匹配的位置,以便下一次继续从匹配的位置继续往下匹配。 为了清晰的查看它的运行原理,可以配合pos函数来获取当前文本匹配的位置。
全栈程序员站长
2022/09/04
8550
【前端基础】JS基础学习笔记整理
JavaScript是一种基于对象的脚本编程语言,是浏览器上的程序语言。当web容器输出内容到浏览器时,这个内容是包含js源代码的,此时,JavaScript可以操作浏览器上的一切内容,在浏览器上提供用户交互,页面美化,增加页面的智能性。 JavaScript是一种基于对象的语言,通过 JavaScript代码来操作对象――访问或者设置对象的属性,编写对象的特定的事件(方法)代码。 JavaScript中的对象是由属性(properties)和方法(methods)两个基本的元素的构成的。前者是对象在实
李海彬
2018/03/27
2.3K0
【前端基础】JS基础学习笔记整理
PERL学习笔记---正则表达式的应用
//这是m//(模式匹配)的一种简写。同qw//操作一样,可以使用任何 成对的分隔符。因此,可以使用m(fred), m<fred>, m{fred}, m[fred],或者m,fred,, m!fred!, m^fred^,其它非成对的分隔符也 可以
yuanyuan
2019/09/10
6990
浅谈Perl正则表达式
Perl正则表达式中模式指在字符串中寻找的特定序列的字符,由反斜线包含:/def/即Perl正则表达式中模式def。其用法如结合函数split将字符串用某Perl正则表达式中模式分成多个单词:@array=split(//,$line);
全栈程序员站长
2022/09/04
1.1K0
正则表达式介绍与使用
正则表达式(Regular Expression)描述字符串结构模式的形式化表达方法,正则(Regex)表达式处理的对象的字符串或者抽象地说是一个对象序列(计算机体系的本质数据结构) 正则表达式是一种文本模式包括普通字符(例如a 到 z 之间的字母)和特殊字符(称为”元字符”),用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”;
全栈工程师修炼指南
2022/09/28
1.7K0
正则表达式介绍与使用
正则表达式介绍与使用
正则表达式(Regular Expression)描述字符串结构模式的形式化表达方法,正则(Regex)表达式处理的对象的字符串或者抽象地说是一个对象序列(计算机体系的本质数据结构) 正则表达式是一种文本模式包括普通字符(例如a 到 z 之间的字母)和特殊字符(称为”元字符”),用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”;
全栈工程师修炼指南
2020/10/23
1.2K0
正则表达式介绍与使用
Perl在ASIC中的应用——高级篇(1):正则表达式
从今天开始,我们介绍Perl在ASIC应用中的高级篇。高级篇主要介绍正则表达式、module、package、面向对象、进程等。
ExASIC
2020/07/16
1.8K0

相似问题

只匹配逗号,而不是括号或方括号中的逗号

20

包含嵌套圆括号

10

在perl中搜索圆括号

50

为什么在某些情况下我们使用圆括号而不是圆括号?

310

圆括号文本捕获(Perl RegEx)

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文