私はまだPHPについて多くのことを学んでいて、文字列の変更は興味深いものです。以前はpreg_matchを使ってメールアドレスの検証や質問の検索などを行ってきました。preg_match_all()はどのように文字列を処理しますか?
私はちょうどこの投稿What's wrong in my regular expression?から来て、なぜpreg_match_all関数が2つの文字列を生成したのか不思議でした。1つの文字の一部が取り除かれ、次にもう1つが目的の出力になりました。
私がこの機能について理解していることは、RegExを使用して文字列ごとに文字列を処理して、その処理を評価することです。このRegExは、最初の配列エントリをバイパスして、望ましい結果を生成するような方法で構造化できましたか?
ので、あなたは他のスレッド
$str = 'text^name1^Jony~text^secondname1^Smith~text^email1^example-
[email protected]~';
preg_match_all('/\^([^^]*?)\~/', $str, $newStr);
for($i=0;$i<count($newStr[0]);$i++)
{
echo $newStr[0][$i].'<br>';
}
echo '<br><br><br>';
for($i=0;$i<count($newStr[1]);$i++)
{
echo $newStr[1][$i].'<br>';
}
この意志出力
^ジョニーズ〜
^スミス〜
^[email protected]~に行く必要はありません
ジョニーズ
スミス
[email protected]
2つの配列エントリの理由が、文字列の元のsytaxによるものか、それとも関数の通常の処理応答なのか不思議です。申し訳ありませんが、これがここにあるべきではありませんが、私は本当にこの作品が好奇心です。
おかげで、 ブロディ
出力には常に、マッチ全体と、式内の各キャプチャグループのエントリが含まれます。 –
答えはありませんが、ここで興味深いのは、より簡単な結果リストを返す 'PREG_SET_ORDER'フラグです。完全一致の '[0]'配列エントリを削除することはできませんが、正規表現で '\ K'を使用して内容を削除することができます。 – mario