1
$tags = preg_split('@ @', 'Hello World 1 2  3 45   54', NULL, PREG_SPLIT_NO_EMPTY);
print_r($tags);
$tags = preg_split('/ /', 'Hello World 1 2  3 45   54', NULL, PREG_SPLIT_NO_EMPTY);
print_r($tags);

$tags = preg_split('@/@', '1/2//3', NULL, PREG_SPLIT_NO_EMPTY);
print_r($tags);
$tags = preg_split('/\//', '1/2//3', NULL, PREG_SPLIT_NO_EMPTY);
print_r($tags);

最後のものが機能しないのはなぜですか?、php 正規表現を構築するための @ と / の違いは何ですか?

説明のためのthx

4

3 に答える 3

2

使用しているツールwritecodeonline.com/phpが壊れています。デフォルトのコードを

echo 'Hello\ World';

Hello\ Worldではなく、を出力する必要Hello Worldがあります。

'/\//'が壊れる理由はこれで説明できます。このツール'///'では、有効な正規表現ではない と認識されます。ただし、二重のバックスラッシュは正しく解釈されます:動作します (ただし、これは PHP が と同等の を'/\\//'「認識」するためです)。'/\//''/\\//'

もう1つのチェック:

echo strlen('///'), ' ', strlen('/\//'), ' ', strlen('/\\//');

印刷する必要があります3 4 4。writecodeonline.com/phpに出力されます3 3 4

于 2012-06-08T12:36:04.240 に答える
1

最後の 1 つは私のマシンで正常に動作します (PHP 5.3.10 ですが、どこでも動作するはずです)。

thebod@dockmaster:~/Sites$ php
<?php
$tags = preg_split('/\//', '1/2//3', NULL, PREG_SPLIT_NO_EMPTY);
print_r($tags);
/////////////////
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

また、@ と / の間に違いはなく、#、~、: も、正規表現と修飾子を区切るために使用される一般的な文字です。詳細については、php.net を参照してください: http://de.php.net/manual/en/regexp.reference.delimiters.php

于 2012-06-08T11:49:58.920 に答える
0

基本的に @ と / の間に違いはありません。任意の特殊文字を使用して一致を事前設定できるためです。使用したのと同じ文字で開始および終了することに注意してください

于 2012-06-08T11:50:21.497 に答える