2012-01-12 26 views

答えて

7

:私は、以下の文字列が一致するように、開始時と終了時に同じ単語を文字列に一致します

/^(\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'は私が検索したものです。 –

0

ここで正規表現は正しい選択ではないと思います。配列に行を分割し、最初と最後の項目を比較しないのはなぜ:

C#の場合:

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

なぜRegExpsは正しい選択ではないと思いますか? regexpの '\ b'は実際にはより優れています。なぜなら、それはホワイトスペースだけでなく、また、大きな文字列では、ソリューションがさらに遅くなることがあります。 – kirilloid

+0

@kirilloid:正規表現には、この解決策では必要ないオーバーヘッドがあります。しかし、他の答えで提供される正規表現の解決策は間違いなくより洗練されています。パフォーマンスに関しては、「コード」ソリューションが改善される可能性があります。 \ *自分の答えを削除しようとしています\ *;) – Stefan

5

M42の答えは、縮退の場合を除いてokです - それは、文字列と一致しません。 1つの単語だけで1つの正規表現の使用内のものを受け入れるために:

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

はまた、必要な部分のみが非常に大きな文字列に大幅に速いかもしれ一致します。 JavaScriptを私の解決策をHere're:

正規表現:

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); 
} 
関連する問題