正则表达式获取所有前缀+单词+后缀,但没有确切的单词
Posted
技术标签:
【中文标题】正则表达式获取所有前缀+单词+后缀,但没有确切的单词【英文标题】:regexp get all prefix+word+postfix but without the exact word 【发布时间】:2018-04-19 04:07:24 【问题描述】:以下示例
表一
id desc
0 qqqqqwertyyyy
1 qwerty
2 bbbbqwerty
3 a qwerty
想要的输出
0 qqqqqwertyyyy
1 111qwerty
【问题讨论】:
没有问题,输出与输入数据不匹配。 我不明白这个问题。 “确切的词”在哪里以及在哪里匹配? 确切的词是'qwerty'和'a qwerty'。无论如何,我找到了答案谢谢你们 【参考方案1】:您可以将正则表达式分解为:
\S+qwerty\b|\bqwerty\S+|\S+qwerty\S+
这将匹配 qwerty
仅当嵌入在其他词中。
【讨论】:
@jojo,plsql
正则表达式引擎是否不支持单词边界 \b
和非空格字符 \S
?。请尝试:[0-9a-zA-Z]+qwerty[[:>:]]|[[:<:]]qwerty[0-9a-zA-Z]+|[0-9a-zA-Z]+qwerty[0-9a-zA-Z]+
正则表达式中的字符类无效
从您提供的链接来看,\A
似乎是词边界的正确选择。所以试试正则表达式:[0-9a-zA-Z]+qwerty\A|\Aqwerty[0-9a-zA-Z]+|[0-9a-zA-Z]+qwerty[0-9a-zA-Z]+
答案或 cmets 中的正则表达式在 Oracle 中均无效 - \b
在 Oracle 中无效,[:>:]
将匹配 :
或 >
和 [[:>:]]
is not a valid POSIX字符类。 \A
matches only at the beginning of a string, or before a newline character at the end of a string 所以这些都不起作用。
@MT0 那么像 javascript 中的 \bword\b
这样的正则表达式在 Oracle 中应该写成 \Aword\Z
吗?如果是这种情况,正则表达式 [0-9a-zA-Z]+qwerty\Z|\Aqwerty[0-9a-zA-Z]+|[0-9a-zA-Z]+qwerty[0-9a-zA-Z]+
应该可以工作。【参考方案2】:
要匹配前缀和后缀,试试这个:
SELECT * FROM tablename WHERE
REGEXP_LIKE (fieldname, '[^[:space:]]+qwerty')
OR REGEXP_LIKE (fieldname, 'qwerty[^[:space:]]+');
【讨论】:
我不想在这里匹配确切的单词 qwerty 你试过了吗?qwerty
不会在这里匹配。 'qwerty_%'
是 prefix
匹配,因为 qwerty
之后至少需要 1 个或多个字符,因为 _%
。 '%_qwerty'
是一个后缀匹配,因为 qwerty
之前至少需要 1 个或多个字符,因为 %_
。
是的,但它匹配“a qwerty”。我需要的是即使有空格也不匹配确切的单词 qwerty
@jojo 好的,我明白了。我编辑了我的答案,请随意尝试。
这是错误的 - [^\s]
将匹配不是 \ 字符或 s
字符的所有字符。您可以改用[^[:space:]]
POSIX 字符类。以上是关于正则表达式获取所有前缀+单词+后缀,但没有确切的单词的主要内容,如果未能解决你的问题,请参考以下文章