Sql 用于完全单词匹配的正则表达式
好吧,我很困惑(显然) 我试图返回(来自Oracle的)行,其中文本字段包含完整的单词,而不仅仅是子字符串 一个简单的例子就是“我”这个词 显示字符串中包含单词“I”的所有行,而不是简单地显示“I”是Sql 用于完全单词匹配的正则表达式,sql,regex,oracle,oracle10g,oracle11g,Sql,Regex,Oracle,Oracle10g,Oracle11g,好吧,我很困惑(显然) 我试图返回(来自Oracle的)行,其中文本字段包含完整的单词,而不仅仅是子字符串 一个简单的例子就是“我”这个词 显示字符串中包含单词“I”的所有行,而不是简单地显示“I”是'%I%”中某个地方的子字符串的行。 所以我写了一个简单的正则表达式: select REGEXP_INSTR(upper(description), '\bI\b') from mytab; 希望我会被发现有单词边界。我没有得到任何结果(或者更确切地说,每行的结果为0) 我所期望的是: “我是
'%I%”中某个地方的子字符串的行。
所以我写了一个简单的正则表达式:
select REGEXP_INSTR(upper(description), '\bI\b') from mytab;
希望我会被发现有单词边界。我没有得到任何结果(或者更确切地说,每行的结果为0)
我所期望的是:
- “我是管理员”->1
- “我是管理员”->0
- “我是管理员吗?”->1
- “这是臭名昭著的管理员”->0
- “管理员,是我”->1
tia是有限的。
\b
或我认为\b不受您的regex风格的支持:
因此,您可以执行以下操作:
(^|\s)word(\s|$)
至少要确保你的“话”由一些空格分隔或是整个字符串。Oracle不支持单词边界锚定,但即使支持,也不会得到期望的结果:\b
在字母数字字符和非字母数字字符之间匹配。alnum的确切定义在不同的实现中有所不同,但在大多数fla中首先,它是[A-Za-z0-9.]
(.NET也考虑Unicode字母/数字)
因此,%I%
中的I
有两个边界
如果将单词边界定义为“单词前/后的空格”,则可以使用
(^|\s)I(\s|$)
这也适用于字符串的开头/结尾。谢谢。这个变体给了我很好的结果:“(^\W)到(\W |$)”是“非单词”字符…但这会拾取%I%
。我的意思是%I%作为您可能在LIKE语句中进行比较的示例…很抱歉出现任何混淆。可能重复的