$dat = 'ab,cd,e\,f,gh';
$dats = preg_split('/(?<!\\\),/', $dat);
print_r($dats);
exit;
結果
Array
(
[0] => ab
[1] => cd
[2] => e\,f
[3] => gh
)
,で区切った文字が必要なのですが、\でエスケープした場合は,で区切らないという処理が欲しくて、ネット上を探して上記のようなサンプルを見つけたのですが、パターンの部分が名にをしているのか分かりません。
だれか解説してもらえないでしょうか?
No.1ベストアンサー
- 回答日時:
2つの問題がかぶっているためわかりにくくなっています。
まず「\\\」というのは「\」のことです。
$dat = 'abc\mno\xyz';
$pattern ='/\\\/';
$dats = preg_split($pattern, $dat);
print_r($dats);
つぎに「(<!abc)xyz」というのは否定後読みという機能です。
この場合abcの後に続かないxyzにマッチします。
$pattern ='/(?<!abc)xyz/';
$dat = 'abcxyz';
print $dat;
if(preg_match($pattern,$dat)) print "OK<br>" ;else print "NG<br>";
$dat = 'abxyz';
print $dat;
if(preg_match($pattern,$dat)) print "OK<br>" ;else print "NG<br>";
その2つを組み合わせると今回のものになります。
(?<!\\\), ・・・「\マーク」の直後にない「,」にマッチ
この回答への補足
求めていた完璧な答えです。ありがとうございます。
ただ、一つ疑問が残っていて、
「\」の正規表現は\\なのではないでしょうか?
もし「\\」が欲しい場合は\\\\のよう二思うのですが、
なぜ3つなのでしょうか?
No.2
- 回答日時:
print $pattern='/\\/';
すると「/\/」が表示されます。それをパターンにつかうと
「\/」がエスケープと勘ちがいされて終端のデリミターが不適合に
なるからじゃないですかねぇ・・・
実際のところpatternはpreg_quote()した方がよいので
$pattern='/'.preg_quote('\\').'/';
とすると、
$pattern='/\\\/';
と同等になるのだと思います。
(ホントは$pattern='/\\\\/'なのかも・・・)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- その他(プログラミング・Web制作) VB.NETの正規表現について 4 2022/04/12 16:54
- PHP PHP ページング データベース 1 2022/06/16 10:30
- 物理学 写真の図についてですが、 ①BC間を導線で繋いだら、AB間、CD間の電場の強さが変わっていますが、こ 1 2023/02/19 14:34
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- 数学 数Bベクトル 平行四辺形ABCDにおいて、辺ABを3:2に内分する点をE、対角線BDを2:5に内分す 3 2022/06/19 12:11
- 英語 提示した結果構文が非文となる理由について 1 2022/07/25 12:22
- 英語 口頭での"the following..."の可否等について 6 2022/08/19 01:01
- PostgreSQL 数値が定期的にあらわれる文字列から、いくつめに出現した数値が指定して切り出したい 1 2023/06/08 13:12
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPの「ereg」って何の略で...
-
PHP preg_matchでUnknown modif...
-
php 正規表現で(ただし○○は除...
-
VBAのコマンドボタンの文字列の...
-
エスケープ文字の復帰(¥r)と...
-
ファイルから読み取った改行文...
-
ソースコードの1行が長いとき...
-
文字の入力で横バー上段、中断...
-
COBOLの改行
-
PHPの¥
-
phpでの文字エンコード
-
エクセルVBA 文字列領域が不足...
-
エクセルのCOUNTIFが正しくカウ...
-
全角括弧と全角読点の間隔を狭...
-
半角数字かどうかの判定
-
ToolTipTextの改行はできないの...
-
JavaMail,本文中の改行について
-
SQL Serverで文字コードUTF-8
-
Excel関数「COUNTIF」で”文字”...
-
aspで作成するcsvファイルで、e...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを使ってHTMLソースから特定...
-
、"(ダブルクォーテーション)...
-
preg_matchでエラーが出ます。
-
PHPの「ereg」って何の略で...
-
PHPで変数から1行目だけを取得...
-
PHPの正規表現で住所を分けるに...
-
PHPで あるフォルダ内の、特定...
-
Excelで数字のみを2倍3倍にする...
-
正規表現で「0」のみ抽出
-
PHPで<a>タグ内からURLと文字を...
-
住所から特定の文字列、数値を...
-
正規表現で特定のHTMLタグのク...
-
正規表現で、半角大文字と半角...
-
正規表現でシングルクォーテー...
-
正規表現パターンの記入方法に...
-
正規表現を使いimgタグ内から幅...
-
Smartyで部分一致
-
preg_matchでのマッチが正しく...
-
php 正規表現で(ただし○○は除...
-
PHPメールフォーム URLと半角...
おすすめ情報