单词边界的Postgresql正则表达式不工作
使用v9.6.2没有尝试其他版本 第一个有效。第二个带汉字的失败了。有什么好处单词边界的Postgresql正则表达式不工作,postgresql,unicode,utf-8,Postgresql,Unicode,Utf 8,使用v9.6.2没有尝试其他版本 第一个有效。第二个带汉字的失败了。有什么好处 dev=> select 'foo bar' ~ '\ybar\y' v; v --- t (1 row) dev=> select '積極的 積極的' ~ '\y積極的\y' v; v --- f (1 row) 它将在不包含以下内容的情况下工作\y: regexp_匹配也可以工作: SELECT regexp_matches('積極的 積極的', '^.*(積極的).*$') AS v;
dev=> select 'foo bar' ~ '\ybar\y' v;
v
---
t
(1 row)
dev=> select '積極的 積極的' ~ '\y積極的\y' v;
v
---
f
(1 row)
它将在不包含以下内容的情况下工作\y: regexp_匹配也可以工作:
SELECT regexp_matches('積極的 積極的', '^.*(積極的).*$') AS v;
v
----------
{積極的}
(1 row)
[更新]
现代汉字是使用Unicode来呈现的,对于正则表达式来说,并非所有编程平台都完全支持Unicode。我想PostgreSQL没有使用支持Unicode单词边界的正则表达式引擎
有些编程语言(如Scala Java)也支持带单词边界的Unicode:
scala> """\b積極的\b""".r findFirstIn "積極的 積極的"
res4: Option[String] = Some(積極的)
请注意,在Scala/Java中,单词边界使用的是\b而不是\y。Javascript,但我很确定问题是相同的:单词被定义为一个单词字符序列,既不在单词字符之前,也不在单词字符之后。单词字符是由ctype或下划线定义的alnum字符。-校对zh_cnhmm,我不注意单词边界的缺点是重点。更新了我的答案。谢谢,是的,可能博士后不支持。感谢你的努力。
scala> """\b積極的\b""".r findFirstIn "積極的 積極的"
res4: Option[String] = Some(積極的)