Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 用于完全单词匹配的正则表达式_Sql_Regex_Oracle_Oracle10g_Oracle11g - Fatal编程技术网

Sql 用于完全单词匹配的正则表达式

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) 我所期望的是: “我是

好吧,我很困惑(显然)

我试图返回(来自Oracle的)行,其中文本字段包含完整的单词,而不仅仅是子字符串

一个简单的例子就是“我”这个词

显示字符串中包含单词“I”的所有行,而不是简单地显示“I”是
'%I%”中某个地方的子字符串的行。

所以我写了一个简单的正则表达式:

select REGEXP_INSTR(upper(description), '\bI\b') from mytab;
希望我会被发现有单词边界。我没有得到任何结果(或者更确切地说,每行的结果为0)

我所期望的是:

  • “我是管理员”->1
  • “我是管理员”->0
  • “我是管理员吗?”->1
  • “这是臭名昭著的管理员”->0
  • “管理员,是我”->1
b不应该按单词边界查找包含的字符串吗


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语句中进行比较的示例…很抱歉出现任何混淆。可能重复的