正则表达式可以匹配任何带引号的字符串或特定的不带引号的字符串

用户名

我需要使用正则表达式解析CSV,并且一个特定的列必须是带引号的字符串或NULL(因为字符串不是null值)。

如果使用引号将其括起来,我可以获取该列,\,("[^"]*")但是如果它为NULL,则尝试进行取回的尝试超出了我的范围。我以为那是类似的东西,\,(("[^"]*")|(NULL))但这会导致奇怪的结果。

总结问题,它需要匹配:

“ Foo”

空值

但不是:

酒吧

编辑

如果我使用值“ This is a string,include it”,则匹配被拒绝(使用接受("[^"]*"))。NULL被接受,但是它不返回字符串“ NULL”,这不是我所需要的行为)

这是完整的正则表达式:如代码中所示:

@fields = $line =~ /^
        (\d{0,10}+)
        \,(\d{0,10}+)
        \,([0-9\.]{0,6}+)
        \,([0-9\.]{0,6}+)
        \,([^,]*)
        \,([^,]*)       
        \,(\d*\.?\d*)
        \,(\d*\.?\d*)   
        \,([^,]*)
        \,([^,]*)
        \,([^,]*)
        \,([^,]*)
        \,([^,]*)
        \,(\w{3}+)
        \,(\w{3}+)
        \,([^,]*)
        \,([^,]*)
        \,(\w{0,10})
        \,(\d+)
        \,([^,]*)           
        \,(\d{1}+)
        \,(("[^"]*")|(NULL))
        \,([^,]*)   
        \,([^,]*)   
        $
    /xo;

这是一个示例行(对不起,很抱歉):

1111,111111,0,0,这是一些文本,1111.11,0.00,0.00,2014-03-14 11:11:1111.111,文本,2014-03-11 11:11:11.111,文本,文本,LLL,AAA ,1900-01-01 00:00:00.000,1900-01-01 23:59:59.000,NULL,0,2014-03-11 11:00:11.111,1,NULL,1111111,NULL

输出:

1111
111111
0
0
这是一些文本
1111.11
0.00
0.00
2014-03-14 11:11:1111.111
文本
2014-03-11 11:11:11.111
文本
文本
LLL
AAA
1900-01-01 00:00:00.000
1900-01- 01 23:59:59.000
NULL
0
2014-03-11 11:00:11.111
1
NULL


1111111

看起来它为\,((“” [^“] *”)|(NULL))匹配返回3个值:NULL,一个空字符串和NULL(仅应返回单个NULL时)。

如果我将重要的NULL(最后一个值的第三位)括在引号中,则会得到以下输出:

1111
111111
0
0
这是一些文本
1111.11
0.00
0.00
2014-03-14 11:11:1111.111
文本
2014-03-11 11:11:11.111
文本
文本
LLL
AAA
1900-01-01 00:00:00.000
1900-01- 01 23:59:59.000
NULL
0
2014-03-11 11:00:11.111
1
“ NULL”
“ NULL”

1111111

这样也可以输出3个值,而不是应输出的单个“ NULL”

杰瑞

更改正则表达式的这一部分:

(("[^"]*")|(NULL))

到:

("[^"]*"|NULL)

您在那里有3个捕获组。第一个包含("[^"]*")|(NULL),第二个包含"[^"]*"和第三个包含NULL,如果您有NULL,则将NULL在第一个捕获组中有一个空的第二个捕获组,并NULL在第三个捕获组中。

根据我的建议,您应该只有一个具有"[^"]*"或的捕获组NULL

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式以匹配变量或字符串的值(带或不带引号)

来自分类Dev

使用正则表达式捕获不带引号的双引号内的字符串

来自分类Dev

Python正则表达式将带引号的字符串与转义的单引号匹配

来自分类Dev

正则表达式匹配忽略双引号的带引号的字符串

来自分类Dev

正则表达式检索带引号的字符串和引号字符

来自分类Dev

正则表达式处理带引号的字符串和双引号英寸

来自分类Dev

javascript正则表达式选择带引号的字符串,但不转义引号

来自分类Dev

正则表达式使用不带引号的键/值对中的空格分割字符串

来自分类Dev

Golang正则表达式替换不包括带引号的字符串

来自分类Dev

正则表达式查找带引号的字符串中的所有大括号

来自分类Dev

正则表达式用_(Sublime)替换带引号的字符串中的空格

来自分类Dev

正则表达式查找带引号的字母的字符串

来自分类Dev

正则表达式查找带引号的字符串中的所有大括号

来自分类Dev

无法在ruby中使用正则表达式突出显示带引号的字符串

来自分类Dev

PHP 正则表达式提取带引号和括号的子字符串

来自分类Dev

不带引号和带引号的cmake字符串

来自分类Dev

带引号和不带引号的字符串扩展

来自分类Dev

计算不带引号的字符串作为表达式

来自分类Dev

匹配带引号的字符串和不带引号的单词

来自分类Dev

正则表达式以匹配引号之间的任何字符串

来自分类Dev

正则表达式在引号之外匹配字符串,如果引号不完整,则不匹配任何内容

来自分类Dev

如何使用正则表达式匹配单引号或双引号中的字符串

来自分类Dev

正则表达式匹配忽略双引号的双引号字符串

来自分类Dev

正则表达式-匹配引号之间的字符串以及引号之前的字符串

来自分类Dev

将不带引号的特定单词与正则表达式匹配

来自分类Dev

标记嵌套表达式,但忽略带空格的带引号的字符串

来自分类Dev

匹配不带正则表达式的字符串

来自分类Dev

使用Unity的SimpleJSON检索不带引号的字符串

来自分类Dev

不带引号的角度打印字符串数组

Related 相关文章

  1. 1

    正则表达式以匹配变量或字符串的值(带或不带引号)

  2. 2

    使用正则表达式捕获不带引号的双引号内的字符串

  3. 3

    Python正则表达式将带引号的字符串与转义的单引号匹配

  4. 4

    正则表达式匹配忽略双引号的带引号的字符串

  5. 5

    正则表达式检索带引号的字符串和引号字符

  6. 6

    正则表达式处理带引号的字符串和双引号英寸

  7. 7

    javascript正则表达式选择带引号的字符串,但不转义引号

  8. 8

    正则表达式使用不带引号的键/值对中的空格分割字符串

  9. 9

    Golang正则表达式替换不包括带引号的字符串

  10. 10

    正则表达式查找带引号的字符串中的所有大括号

  11. 11

    正则表达式用_(Sublime)替换带引号的字符串中的空格

  12. 12

    正则表达式查找带引号的字母的字符串

  13. 13

    正则表达式查找带引号的字符串中的所有大括号

  14. 14

    无法在ruby中使用正则表达式突出显示带引号的字符串

  15. 15

    PHP 正则表达式提取带引号和括号的子字符串

  16. 16

    不带引号和带引号的cmake字符串

  17. 17

    带引号和不带引号的字符串扩展

  18. 18

    计算不带引号的字符串作为表达式

  19. 19

    匹配带引号的字符串和不带引号的单词

  20. 20

    正则表达式以匹配引号之间的任何字符串

  21. 21

    正则表达式在引号之外匹配字符串,如果引号不完整,则不匹配任何内容

  22. 22

    如何使用正则表达式匹配单引号或双引号中的字符串

  23. 23

    正则表达式匹配忽略双引号的双引号字符串

  24. 24

    正则表达式-匹配引号之间的字符串以及引号之前的字符串

  25. 25

    将不带引号的特定单词与正则表达式匹配

  26. 26

    标记嵌套表达式,但忽略带空格的带引号的字符串

  27. 27

    匹配不带正则表达式的字符串

  28. 28

    使用Unity的SimpleJSON检索不带引号的字符串

  29. 29

    不带引号的角度打印字符串数组

热门标签

归档