[英]Regex match that must contain all characters in a string
我確定已經有人問過並回答了這個問題,但老實說,經過大量搜索並閱讀了Regex Tutorial之后,我找不到我的答案。 我想做的是匹配一個具有與另一個字符串相同的字符和長度的字符串。 例如,字符串“ abcde”將匹配“ edcba”,但將不匹配“ abcdf”或“ aabbc”或“ abc” 。
這是我使用的最接近的使用字符類的測試代碼,但是我不知道的是一旦比賽開始,如何使regex基本上遍歷該類中的每個字符串:
$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
基本上,您正在檢查字謎 。 為什么不對字符串排序並比較相等性呢?
$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);
}
我不確定您是否要在此使用Regex。 我想您會希望對所有字母使用簡單的舊find語句。
作為使用正則表達式的替代方法,您可以將每個字母轉換為一個字符,然后對其進行排序,並檢查兩個字符是否相等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.