2010-10-28 4 views
2

Я уверен, что об этом уже спрашивали и отвечали, но я, честно говоря, не смог найти свой ответ после поиска довольно немного и прочитал Regex Tutorial. То, что я ищу, соответствует строке, которая имеет те же символы и длину, что и другая строка. Например, строка "ABCDE" будет соответствовать "edcba", но не будет соответствовать "ABCDF" или "aabbc" или "а".Соответствие регулярных выражений, которое должно содержать все символы в строке

Вот мой тестовый код с наиболее близким к нему, который использует класс символов, но я не могу понять, как заставить регулярное выражение в основном перебирать каждый символ в классе, начиная с начало строки матча:

$string = 'abcde'; 
$array = array('edcba','eeeee','fghij','fedcba','qqq','cbaed','cba'); 
foreach ($array as $match) 
{ 
    if (preg_match("/[$string]/i",$match)) 
     echo "TRUE -> $match"; 
    else 
     echo "FALSE -> $match"; 
} 

Что дает результат:

TRUE -> edcba 
TRUE -> eeeee 
FALSE -> fghij 
TRUE -> fedcba 
FALSE -> qqq 
TRUE -> cbaed 
TRUE -> cba 

Когда то, что я действительно хочу это:

TRUE -> edcba 
FALSE -> eeeee 
FALSE -> fghij 
FALSE -> fedcba 
FALSE -> qqq  
TRUE -> cbaed 
FALSE -> cba 

ответ

7

В основном вы делаете отметки для anagrams. Почему бы не отсортировать строки и не сравнить их с равенством?

$string = 'abcde'; 
$string = str_sort($string); // sort the string. 
$array = array('edcba','eeeee','fghij','fedcba','qqq','cbaed','cba'); 
foreach ($array as $match) { 
     $match = str_sort($match); // sort each match. 
     if (strcmp($match,$string) == 0) // now string compare. 
       echo "TRUE -> $match\n"; 
     else 
       echo "FALSE -> $match\n"; 
} 

function str_sort($string) { 
// function to sort a string..not the best but works :) 
     $tmp = str_split($string); 
     sort($tmp); 
     return implode('',$tmp); 
} 

Code In Action

+0

DOH! Спасибо, что умудряется уяснить смысл, я думаю, что я задумался о регулярном выражении и упал на кроличью нору. Благодарю. – DrPerdix

0

Я не уверен, что вы захотите использовать Regex в этом. Я думаю, вы захотите использовать простой старый поиск для всех ваших писем.

0

В качестве альтернативы использования регулярных выражений, вы можете преобразовать каждую букву в символ, а затем отсортировать их и проверить два strigns равны.

 Смежные вопросы

  • Нет связанных вопросов^_^