当前位置:  开发笔记 > 编程语言 > 正文

正则表达式在引号之外选择逗号

如何解决《正则表达式在引号之外选择逗号》经验,为你挑选了2个好方法。

我不太确定这是否可行,所以我转向你.

我想找到一个正则表达式,它将挑选掉所有引号集之外的逗号.

例如:

'foo' => 'bar',
'foofoo' => 'bar,bar'

这将在第1行中选出单个逗号 'bar',

我真的不关心单引号和双引号.

有没有人有任何想法?我觉得这应该可以用readaheads,但我的正则表达式太弱了.



1> MarkusQ..:

这将匹配任何字符串,包括第一个未引用的",".那是你想要的吗?

/^([^"]|"[^"]*")*?(,)/

如果你想要所有这些(并且作为反对那个说不可能的人的例子)你可以写:

/(,)(?=(?:[^"]|"[^"]*")*$)/

这将匹配所有这些.从而

'test, a "comma,", bob, ",sam,",here'.gsub(/(,)(?=(?:[^"]|"[^"]*")*$)/,';')

用分号替换不在引号内的所有逗号,并产生:

'test; a "comma,"; bob; ",sam,";here'

如果您需要它跨换行符,只需添加m(多行)标志.



2> Avinash Raj..:

以下正则表达式将匹配双引号外的所有逗号,

,(?=(?:[^"]*"[^"]*")*[^"]*$)

DEMO

(仅限PCRE)

"[^"]*"(*SKIP)(*F)|,

"[^"]*"匹配所有双引号块.也就是说,在此buz,"bar,foo"输入中,此正则表达式"bar,foo"仅匹配.现在,以下内容(*SKIP)(*F)使匹配失败.然后它移动到|符号旁边的模式,并尝试匹配剩余字符串中的字符.也就是说,在我们的,模式旁边的输出|中只匹配后面的逗号buz.请注意,这与双引号内的逗号不匹配,因为我们已经使双引号部分跳过.

DEMO


以下正则表达式将匹配双引号内的所有逗号,

,(?!(?:[^"]*"[^"]*")*[^"]*$)

DEMO

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有