我正在尝试在飞镖Regexp中捕获符号。我的正则表达式如下:
double myfunc(unsigned n, const double *x,double *grad,void *data)
{
double h = 1e-8;
if (grad) {
grad[0] = (log(x[0] + h) - log(x[0])) / h;
grad[1] = (log(x[1] + h) - log(x[1])) / h;
}
return log(x[0]) + log(x[1]);
}
但是,我还需要使其捕获符号“ 我不能在其中粘贴“,因为它弄乱了字符串。有什么主意怎么做? 谢谢。
edit:jamesdlin的答案非常适合飞镖。但这不适用于我的flutter应用程序,因此我认为它与flutter有关。这是我将其应用到的代码:
RegExp containsSymbolRegExp = RegExp(r"[-!$%^&*()_+|~=`{}\[\]:;'<>?,.\/]");
答案 0 :(得分:1)
您可以利用相邻字符串文字的字符串连接,并使用单引号字符串或使用"
转义的非原始字符串:
RegExp(
r"[-!$%^&*()_+|~=`{}\[\]:;'<>?,.\/"
'"'
"]");
或者,您总是可以使用带有更多转义符的非原始字符串:
RegExp(
"[-!\$%^&*()_+|~=`{}\\[\\]:;'<>?,.\\/\"]");
虽然比较麻烦。
答案 1 :(得分:1)
要回答您问题的已编辑部分,因为它可以在Dart中使用,但不能在Flutter中使用...
这是因为Flutter中TextField值中的撇号/引号是右引号,因此使用不同的Unicode。
对于撇号,它是U + 2019(’
)而不是U + 0027('
)
对于引号,使用U + 201D(”
)代替U + 0022("
)
您尝试使用的正则表达式无法捕获此类字符。因此,您只需要将它们添加到Regex中即可。
RegExp containsSymbolRegExp = RegExp(
r"[-!$%^&*()_+|~=`{}#@\[\]:;'’<>?,.\/"
'"”'
"]");
提示:调试! :) 当值到达要评估的值的断点时,我已经可以看到该值的某些部分看起来很有趣。
答案 2 :(得分:1)
更好的解决方案是使用三重 "
作为字符串的开始和结束。
在这种情况下,"
不会结束字符串。
试试这个:
RegExp containsSymbolRegExp = RegExp(r"""your_regexp_here""");
也可以用这样的撇号来完成:
RegExp containsSymbolRegExp = RegExp(r'''your_regexp_here''');