匹配字符串的正则表达式等于组中的一个

时间:2012-01-12 09:52:51

标签: regex

E.g。我想在结尾处将字符串与相同的单词匹配,以便跟随字符串匹配:

aaa dsfj gjroo gnfsdj riier aaa
sdf foiqjf skdfjqei  adf sdf sdjfei sdf
rew123 jefqeoi03945  jq984rjfa;p94  ajefoj384 rew123

3 个答案:

答案 0 :(得分:8)

这个可以完成这项工作:

/^(\w+\b).*\b\1$/

<强>解释

/           : regex delimiter
  ^         : start of string
    (       : start capture group 1
      \w+   : one or more word character
      \b    : word boundary
    )       : end of group 1
    .*      : any number of any char
    \b      : word boundary
    \1      : group 1
  $         : end of string
/           : regex delimiter

答案 1 :(得分:5)

M42 的答案是可以的,除了退化的情况 - 它不会匹配只有一个单词的字符串。为了接受一个regexp使用中的那些:

/^(?:(\w+\b).*\b\1|\w+)$/

在非常大的字符串上,仅匹配必要部分可能会明显更快。这是我在javascript上的解决方案:

正则表达式:

function areEdgeWordsTheSame(str) {
    var m = str.match(/^(\w+)\b/);
    return (new RegExp(m[1]+'$')).test(str);
}

字符串:

function areEdgeWordsTheSame(str) {
    var idx = str.indexOf(' ');
    if (idx < 0) return true;
    return str.substr(0, idx) == str.substr(-idx);
}

答案 2 :(得分:0)

我不认为正则表达式是正确的选择。为什么不将这些行拆分成一个数组并比较第一个和最后一个项目:

在c#中:

string[] words = line.Split(' ');
return words.Length >= 2 && words[0] == words[words.Length - 1];