你好吗?
[我是飞镖和扑打的初学者,也是新手程序员,这是我第一次在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。
\w
字符是[A-Za-z0-9_]
的简写。在您的情况下,您正在使用阿拉伯字母,因此该表达式将不匹配,因为A-Z
属于拉丁字母。
解决此问题的一种方法是使用\p{L}
,这基本上与任何字母匹配,而与语言无关。有关该主题的更多信息,您可以研究对unicode匹配感兴趣的正则表达式。
尝试实际完成我想做的事后,我发现最好的解决方案是:
RegExp exp = new RegExp(r"([#][^\s#]*)");
String str = "#الالاا_سيسيسشي_لأيبيبالابل";
exp.allMatches(str).forEach((m) {
print(
m.group(0),
);
});