2012-01-12 41 views

回答

7

这一个可以做TE工作:

/^(\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 
+0

谢谢! '\ 1'是我搜索的。 – 2012-01-12 10:04:15

0

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

在C#:

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

为什么您认为RegExps在这里不是正确的选择? 在正则表达式中'\ b'实际上更好,因为它不仅匹配whitespcaces。而在大字符串你的解决方案可能会更慢。 – kirilloid 2012-01-12 10:31:03

+0

@kirilloid:我认为正则表达式带有一个开销,而这个解决方案并不需要。然而,其他答案中提供的正则表达式解决方案绝对更优雅。关于性能,“代码”解决方案可以改进。 \ *趋于删除我的答案\ *;) – Stefan 2012-01-12 10:37:54

5

M42的答案是,除了退化情况确定 - 它不会匹配字符串只有一个字。为了接受这些一个正则表达式使用内:

/^(?:(\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); 
}