【发布时间】:2014-04-05 07:21:18
【问题描述】:
在 GAS 中,我可以正确地将重音与具有边界字符的正则表达式匹配,例如 \bà\b。字符 à 仅在它是一个单独的单词时才匹配。这适用于 GAS:
function test_regExp() {
var str = "la séance est à Paris";
var RegExp = "\\bà\\b";
var PatReg= new RegExp( RegExp);
var found=PatReg.exec(str);
if (found) {
Logger.log( [str.substring(0,found.index),found[0],str.substring(found[0].length+found.index)] );
} else Logger.log("oops! Did not match");
在 BigQuery 中,如果边界字符位于重音符号旁边,则模式不匹配。 \bséance\b 匹配降神会:
SELECT [row],etext,ftext FROM [hcd.hdctextx] WHERE (REGEXP_MATCH(ftext,"\\bséance\\b") ) LIMIT 100;
\bà\b 不匹配 à 作为单词:
SELECT [row],etext,ftext FROM [hcd.hdctextx] WHERE (REGEXP_MATCH(ftext,"\\bà\\b") ) LIMIT 100;
我假设 BigQuery 与 GAS 不同,它在边界字符集中包含重音符号。所以 \bséance\b 有效,因为 é 可以作为该配置中的边界正常工作。 \bà\b 或 \bétranger\b 或 \bmarché\b 不起作用,因为重音 + \b 被解释为 \b\b,它从不匹配任何内容。 (好吧,我在这里抓住了稻草,因为我找不到更好的解释......除了一个错误。)
我不认为这是一个 unicode 问题,因为它只会出现在边界位置。
因此,目前无法在这些特定的重音配置中使用边界。
有没有办法在 BigQuery 或其他修复中设置语言环境?
解决方法:用 (?:[^a-zA-Zéàïëâê]) 等替换 \b。
谢谢!
【问题讨论】:
-
另一个发现:模式 "(?:\\PL)à" 在 BQ 中有效,但在 GAS 中无效。两者都应该使用相同的 RE 实现。可能是这个问题纯粹是一个字符集问题,但它看起来像是一个错误的 RE 实现......在一个或另一个或两者上。
标签: regex google-apps-script google-bigquery