Regexp dart表示飞镖中的阿拉伯字符

问题描述 投票:0回答:2

你好吗?

[我是飞镖和扑打的初学者,也是新手程序员,这是我第一次在StackOverflow上提问。

我现在正在训练正则表达式,我正在尝试创建一个以匹配所有带有井号标记的字符,例如:

  • #I_am_here
  • #Stop

无论如何,一切正常,但是实际上,当我尝试用阿拉伯语替换英语字符串时,我被卡住了。


void main() {
  String text = "#اسمي_هنا";
  RegExp exp = new RegExp(r"\B#\w\w+" , unicode: true , multiLine: true);
  exp.allMatches(text).forEach((match) {
    print(match.group(0));

    if (match.group(0) == null) {
      print(null);
    }
  });

}

它甚至不输出null。

regex string dart unicode hashtag
2个回答
0
投票

\w字符是[A-Za-z0-9_]的简写。在您的情况下,您正在使用阿拉伯字母,因此该表达式将不匹配,因为A-Z属于拉丁字母。

解决此问题的一种方法是使用\p{L},这基本上与任何字母匹配,而与语言无关。有关该主题的更多信息,您可以研究对unicode匹配感兴趣的正则表达式。


0
投票

尝试实际完成我想做的事后,我发现最好的解决方案是:

RegExp exp = new RegExp(r"([#][^\s#]*)");
  String str = "#الالاا_سيسيسشي_لأيبيبالابل";
  exp.allMatches(str).forEach((m) {
    print(
      m.group(0),
    );
  });
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.