2012-01-12 3 views
2

E.g. Я хочу, чтобы соответствовать строку с тем же словом в конце, как на начала, так что следующие строки совпадают:Регулярное выражение, которое соответствует строке, равно одному в группе

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

ответ

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 здесь не правильный выбор? '\ b' в regexp на самом деле лучше, потому что это соответствует не только пробелам. И на больших струнах ваше решение может быть еще медленнее. – kirilloid

+0

@kirilloid: Я думаю, что регулярное выражение приходит сюда с накладными расходами, которые не требуются для этого решения. Тем не менее, решение regex, представленное в других ответах, определенно более элегантно. Что касается производительности, решение «code» может быть улучшено. \ * Стремление удалить мой ответ \ *;) – Stefan

5

ответ M42 «s это нормально, за исключением вырожденных случаев - это не будет соответствовать строка с одним словом. Для того, чтобы принять те в использовании один регулярных выражений:

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

соответствие Также необходимо только часть может быть значительно быстрее на очень больших строк. Here're мои решения на JavaScript:

RegExp:

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); 
} 
Смежные вопросы