在GAS中,我可以正確匹配具有邊界字符的正則表達式的重音,例如\bà\ b。字符à僅在它是單獨的單詞時才匹配。這適用於GAS:BigQuery REGEXP_MATCH和重音:邊界通配符失敗?
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會與的séance:
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,不像天然氣,是包括在邊界字符口音組。所以\bséance\ b可以工作,因爲在該配置中,é可以正常工作作爲邊界。 \bà\ b或\bétranger\ b或\bmarché\ b不起作用,因爲重音符+ \ b被解釋爲\ b \ b,它絕不會匹配任何東西。 (好吧,我在這裏抓着吸管,因爲我找不到更好的解釋......除了一個bug)
我不認爲這是一個Unicode的問題,因爲它只會在邊界位置。
因此,目前沒有辦法在這些特定的口音配置中使用邊界。
有沒有辦法在BigQuery或其他修復中設置區域設置?
解決方法:替代(?:[^ a-zA-Zéàïëëêê])等等\ b。
謝謝!
另一個發現:模式「(?:\\ PL)à」適用於BQ,但不適用於GAS。兩者都應該使用相同的RE實現。可能是因爲這個問題純粹是一個字符集問題,但它看起來像是一個錯誤的RE實現......在一個或另一個或兩個上。 – wgw