正则表达式如何匹配空值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式如何匹配空值?相关的知识,希望对你有一定的参考价值。

参考技术A

正则表达式匹配空值方式如下:

\\b 匹配单词开头或结尾位置

^ 匹配字符串开端位置

$ 匹配字符串结尾位置

\\s 匹配一切空白字符

\\n 匹配换行

正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

扩展资料:

构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。

正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

参考资料来源:百度百科-正则表达式

正则表达式 - 单词后不匹配空值

【中文标题】正则表达式 - 单词后不匹配空值【英文标题】:Regex - Don't match nulls after words 【发布时间】:2014-06-25 21:07:20 【问题描述】:

我在管道 (|) 上拆分字符串,当缺少字段时,正则表达式 [^|]* 工作正常,但它在单词后匹配空字符:

GARBAGE|||GA|30604 产生匹配

GARBAGE, null, null, null, GA, null, 30604, null

我也尝试过[^|]+,它会产生匹配

GARBAGE, GA, 30604

编辑:我想要的是GARBAGE, null, null, GA, 30604|||| 将产生匹配 null, null, null, null, null

我正在按索引引用匹配项,那么如何修复正则表达式使其逐个字段匹配,如果字段中没有其他数据,则包括空值?

【问题讨论】:

【参考方案1】:

这就是拆分的工作原理。您应该使用拆分类型的功能。 总是有一个偏见的分裂用途。

您的情况很简单,因为它拆分为单个字符,在正常情况下不需要正则表达式。 在这种情况下,使用正则表达式,如果没有前瞻/后瞻,就无法实现偏差。

 # (?:^|(?<=\|))([^|]*)(?=\||$)

 (?:
      ^                     # BOS
   |                      # or
      (?<= \| )             # Pipe behind
 )
 ( [^|]* )             # (1), Optional non-pipe chars
 (?=
      \|                    # Pipe ahead
   |                      # or
      $                     #  EOS
 )

【讨论】:

这在 rubular.com 上完美运行,但 PL/SQL 只匹配空值与 v_fullname := REGEXP_SUBSTR(input_line, v_regex, 1, 2);。您对为什么会这样有任何见解吗? @benjsigmon - 抱歉,我不知道 pl/sql。但是,查看正则表达式,您不需要捕获组。对于测试,您可以将转义的管道放入一个独立的类中。另外,确保 v_regex 字符串是正确的。打印时应该是原始的正则表达式。 (?:^|(?&lt;=[|]))[^|]*(?=[|]|$)【参考方案2】:

虽然不完全是您想要的,但也许您可以将它变成行并以这种方式使用它:

select nvl(regexp_substr( str, '([^|]*)\|0,1', 1, level, 'i', 1 ), 'null') part
from ( select 'GARBAGE|||GA|30604' str from dual )
connect by level <= regexp_count( str, '\|' ) + 1;

通过添加 where 子句来指定哪一行(字段),其中 level 等于您想要的行(字段):

select nvl(regexp_substr( str, '([^|]*)\|0,1', 1, level, 'i', 1 ), 'null') part
from ( select 'GARBAGE|||GA|30604' str from dual )
where level = 4
connect by level <= regexp_count( str, '\|' ) + 1;

【讨论】:

以上是关于正则表达式如何匹配空值?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式的空值该如何写?

正则表达式如何判断只能有数字和字母,并且至少一位

使用正则表达式匹配日志文件行时的可选字段

正则表达式如何匹配+号?

求教正则表达式如何匹配

正则表达式如何匹配多行的所有任意字符