【问题标题】:Regex to match a string only if a string does not exist正则表达式仅在字符串不存在时才匹配字符串
【发布时间】:2012-11-29 12:48:56
【问题描述】:

任何人都可以建议我使用正则表达式的解决方案,以匹配给定字符串中不存在的字符串。

假设我有一个字符串

罗汉要回家了

我不想这样

字符串应该存在,然后它不会返回。但如果字符串中不包含包含“going to”,则返回字符串

有效

  • 罗汉在家

无效

  • 罗汉要回家了

我听说正则表达式不太适合否定某些东西(单个字符除外)。正则表达式更倾向于匹配字符串,而不是“不匹配”它们。如果有人有解决方案,请在正则表达式中提出建议

我尝试过创建正则表达式,但直到现在都没有成功。

SELECT   1 
  FROM   DUAL 
 WHERE   REGEXP_LIKE (' Rohan is 12 home'
                       , '^\s[^going to])$','i'); 

【问题讨论】:

  • 你不能只搜索字符串并反转结果吗?例如testStr NOT LIKE '%going to%'
  • @Lorax:先生,我正在寻找一个解决方案,只是为了我在正则表达式方面的知识

标签: regex oracle


【解决方案1】:

试试这个,它使用否定的前瞻性:

^(?!.*going to.*$)

【讨论】:

  • :不返回任何行`SELECT 1 FROM DUAL WHERE REGEXP_LIKE ('Rohan is at home', '^(?!.*going to)','i'); `.
  • :你能帮个忙吗?请解释一下。
  • @GauravSoni Oracle 还不支持前瞻。
  • @VincentMalgrat:好的,谢谢,无论如何我现在正试图理解这个向后的前瞻。
  • @GauravSoni 据我了解,前瞻允许匹配在另一个表达式之前(或之后)的表达式。相反,否定前瞻允许匹配 不是前面有另一个表达式的表达式。这些允许定义没有前瞻就不可能的表达式。
【解决方案2】:

检查负前瞻。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    相关资源
    最近更新 更多