8
4

3 回答 3

1

您可以使用正则表达式来构建您的正则表达式吗?这是一个 javascript 示例,(尽管我知道您没有使用 js):

function Examp () {
  var uString = "猫机+猫+猫ymg+sah猫";
  var plussed = uString.replace(/(.)(?=[\+\*])/ig,"($1)");
  console.log("Starting with string: " + uString + "\r\n" + "Result: " + plussed);
  uString = "猫机+猫*猫ymg+s\\a+I+h猫";
  plussed = uString.replace(/(\\?.)(?=[\+\*])/ig,"($1)");
  console.log("You can even take this a step further and account for a character being escaped, if that's a consideration.")
  console.log("Starting with string: " + uString + "\r\n" + "Result: " + plussed);
}
<input type="button" value="Run" onclick="Examp()" />

于 2015-02-21T09:02:22.497 回答
1

根据其手册页,glibc了解 POSIX 正则表达式。POSIX regexp本身没有 unicode 支持。有关启发这一点的标准摘录,请参阅此答案。这意味着您也可以忘记 UTF。这也意味着无论您处于何种语言环境,多字节字符都不适合。

我提到的帖子(以及这个帖子)建议您使用一些支持 unicode 的正则表达式库,例如pcre。如果您有兴趣,pcre提供了一个假的 posix 接口,并添加了一个非标准的 REG_UTF 标志。除了#include 指令和在编译步骤添加 REG_UTF 之外,您不必重写代码。

希望这能满足您的需求。

于 2021-07-28T14:56:49.120 回答
0

有没有办法将要匹配的模式或字符串标记为包含 utf8 字符?

我怀疑LC_CTYPE环境变量(或其他相关的语言环境设置)是制作regcomp/regexec理解您的编码的方式。

至少,grep程序似乎考虑到了这一点,如https://stackoverflow.com/a/40809461/94687所示;我还没regcomp有用功能测试过这个。

于 2016-11-26T23:35:38.757 回答