Regex 一种正则表达式,用于排除用户输入答案开头和结尾的单词或字符

Regex 一种正则表达式,用于排除用户输入答案开头和结尾的单词或字符,regex,dart,Regex,Dart,目标: bool checkAnswer(String answer) { List _answers = widget.answers; for (var i = 0; i < _answers.length; ++i) { // This _correctAnswer = RegExp("?!(the)|(an)|(a)?${widget.answers[i]}s?").hasMatch(answer); if

目标:

 bool checkAnswer(String answer) {
    List _answers = widget.answers;

    for (var i = 0; i < _answers.length; ++i) {
      // This 
      _correctAnswer = RegExp("?!(the)|(an)|(a)?${widget.answers[i]}s?").hasMatch(answer);
    if (_correctAnswer) {
      return _correctAnswer;
    }
 
    }
    return false;
  }
我有一个回答框,可以接受用户的输入。为了减少我在后端输入的可能正确答案的数量,我想使用RegExp忽略答案开头和结尾的某些单词/字符

如果答案是:山。 我也会接受:

我尝试过的:

 bool checkAnswer(String answer) {
    List _answers = widget.answers;

    for (var i = 0; i < _answers.length; ++i) {
      // This 
      _correctAnswer = RegExp("?!(the)|(an)|(a)?${widget.answers[i]}s?").hasMatch(answer);
    if (_correctAnswer) {
      return _correctAnswer;
    }
 
    }
    return false;
  }
bool检查应答(字符串应答){
列表_answers=widget.answers;
对于(变量i=0;i<\u.length;++i){
//这个
_correctAnswer=RegExp(“?!(the)|(an)|(a)?${widget.answers[i]}s?”).hasMatch(answer);
如果(正确答案){
返回正确答案;
}
}
返回false;
}

此函数查看用户输入,并将其与我在后端输入的答案进行比较。问题是它还接受单个字符“t、h、e”…等,因此您希望删除前导的
“a”或
“a”
,以及尾随的复数
“s”

也许:

bool检查答案(字符串答案,列出有效答案){
对于(变量i=0;i
这将检查字符串是否为有效答案之一,可选前缀为
the
a
an
,可选后缀为
s

前导的
^
和尾随的
$
\$
,因为它是非原始字符串文本)确保regexp匹配整个输入(
^
匹配字符串的开头,
$
匹配字符串的结尾)。
|
与前面的内容或后面的内容匹配(“备选方案”)

如果要匹配更多不同的后缀,请说“es”或“.”,您可以更改
s?
也接受这些后缀:

var re=RegExp(“^(?:an?)${validAnswers[i]}(?:e?s?\\\.?\$”,区分大小写:false);
我猜你想接受
s
es
,并且独立于此,接受

您原来的
RegExp
无效。如果它真的运行了,我无法预测它会做什么。(例如,
RegExp
不能以
开头)。
我建议阅读RegExp教程。

这就是我解决问题的方法:

开始时忽略:the,an,a 在结尾处忽略:s、es和。

bool checkAnswer(String answer) {
  List _answers = widget.answers;
  for (var i = 0; i < _answers.length; i++) {
    var re = RegExp("^(?:the |an |a )?${_answers[i]}(?:s|es)?.?\$", caseSensitive: false);
    if (re.hasMatch(answer)) return true;
  }
  return false;
}
bool检查应答(字符串应答){
列表_answers=widget.answers;
对于(变量i=0;i<\u answers.length;i++){
var re=RegExp(“^(?:the | an | a)${{u answers[i]}(?:s | es).?\$”,区分大小写:false);
if(关于hasMatch(答案))返回true;
}
返回false;
}

感谢您抽出时间提供答案。但是,您能否提供以下方面的详细信息:1。这些符号在做什么??:和^和^以及2美元。我怎么也会忽略:es和。(句号)最后呢?3.为什么您创建了_removeExtrasRE,但没有使用它?4.如何接受“a”或“an”作为答案而不是“n”谢谢:)我无法让上面的代码工作。以上仅接受包含“The”或“an”抱歉的答案,在第一组之后缺少
,并且不需要
\u removeExtrasRE
(这是在最后一分钟重写时发生的情况)