E.g。我想在结尾处将字符串与相同的单词匹配,以便跟随字符串匹配:
aaa dsfj gjroo gnfsdj riier aaa
sdf foiqjf skdfjqei adf sdf sdjfei sdf
rew123 jefqeoi03945 jq984rjfa;p94 ajefoj384 rew123
答案 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];