しかし私は、あなたの条件がまだ一致します、正規表現せずにそれを行うための方法を思い付いた:
function my_func($str) {
$letters = 'abcdefghijklmnopqrstuvwxyz';
$match = true; // Will be set to false if does not match conditions
$l1pos = strrpos($letters, $str[0]);
$l2pos = strrpos($letters, $str[1]);
$l3pos = strrpos($letters, $str[2]);
$l4pos = strrpos($letters, $str[3]);
$l5pos = strrpos($letters, $str[4]);
// If letter 2 comes before letter 1
if ($l2pos < $l1pos) { $match = false;}
// If letter 3 comes before letter 2
if ($l3pos < $l2pos) { $match = false; }
// If letter 4 comes after letter 3
if ($l4pos >= $l3pos) { $match = false; }
// If letter 5 comes after letter 4
if ($l5pos >= $l4pos) { $match = false; }
return $match;
}
あなたがそうのようにそれを使用することができます:あなたの場合は
$string = 'apple';
if (my_func($string)) {
print 'Matched!';
}
else {
print 'Not Matched. :(';
}
関数を実際に小さくしたい場合は、以下を使用することができます。
function my_func($str) {
$letters = 'abcdefghijklmnopqrstuvwxyz';
$match = true;
function m($i) {
return strrpos($letters, $str[$1]);
}
if ((m(1) < m(0)) || (m(2) < m(1)) || (m(3) >= m(2)) || (m(4) >= m(3))) {
$match = false;
}
return $match;
}
私はまた、次の正規表現を試し、そして得なかった:動的に前のキャプチャグループのいずれかにa
またはz
を設定しながら
^([a-z]) # First Letter
([\1-z]) # Second Letter
([\2-z]) # Third Letter
([a-\3]) # Fourth Letter
([a-\4]) # Fifth Letter
しかし、あなたはa-z
を使用することはできません。 PHPの連結を使ってRegExを作成することもできますが、これは最初の1文字ごとに少なくとも4行のコードを必要とします。
私は以下を作成しましたが、それは3文字目までしか動作しません。 4番と5番にはエラーがあります。うまくいけば、私がしようとしていることに論理を見ることができたら···[DEMO](https://regex101.com/r/nH2fJ7/1) – Druzion
['ord()'](http:// [このデモ](https://eval.in/543423)の[ASCII値](http://www.ascii-code.com/)のような[php.net/manual/en/function.ord.php] )。 MySQLでは[カスタム関数](http://dev.mysql.com/doc/refman/5.7/en/adding-functions.html)を追加できますが、多少の努力が必要です。 MySQLの正規表現では、私はそれができないと思う。 –