No.2ベストアンサー
- 回答日時:
preg_split を使えば、区切り文字を正規表現で指定して文字列の配列への分解ができます。
<?php
$a="文字列1\r\n文字列2\r\n文字列3\r\n";
$b="文字列1\r文字列2\r文字列3\r";
$c="文字列1\n文字列2\n文字列3\n";
foreach (array($a,$b,$c) as $str) {
$array = preg_split('/\r\n|\r|\n/', $str);
print $array[0].",".$array[1]."<br>\n";
}
?>
あと、前の方の回答ですが、preg_split 一発で出来るものを preg_replaceしてからexplodeしているという無駄なのもさておき、preg_replace の引数もあまり普通の使い方になっていません。
preg_replaceで'[\r\n|\r|\n]'を指定していますが、これは'/\r\n|\r|\n/'と同じ意味で、
正規表現としては「\r\n|\r|\n」つまり『「\r\n」か「\r」か「\n」』という指定です。
(PCREでは、先頭と最後に正規表現のセパレータ文字を指定します。通常は'/'で始めて'/'で終わるのが一般的ですが、'{'~'}'などの括弧開き~括弧閉じも指定できます。
つまり、先頭の'['と末尾の']'は正規表現としては無視されて、その中身の「'\r\n|\r|\n」が正規表現としての指定になります。)
もし正規表現としての「[\r\n|\r|\n]」を指定すると、これは『「\r」か「\n」か「|」か「\r」か「|」か「\n」』という全く異なり意味になりますのでご注意ください。
No.4
- 回答日時:
基本的に やり方は一緒ですが、「区切り文字」を作るというだけなら nl2br を使うのも手かと思います。
まぁ、やってみたら うまくいきませんでしたが、理論上は ↓の例3の通りかと。
http://php.net/manual/ja/function.nl2br.php
参考URL:http://php.net/manual/ja/function.nl2br.php
No.3
- 回答日時:
mtaka2さんの回答で申し分ないですが、1点だけ補足。
「バックスラッシュの後ろがエスケープ対象になる文字じゃなければ『\』1つでバックスラッシュ自体を表す」ことが出来る言語がPHPぐらいなんですよね。
多くの言語ではバックスラッシュ自体を表したければ、如何なる場合も『\\』としなければなりません。
たとえば
printf("[a]\[b]");
これはPHPでは
[a]\[b]
と表示されますが、C言語では
[a][b]
と無視されて表示されます。
Javaでは
System.out.println("[a]\[b]");
はコンパイルエラーになります。
今回の場合は "\n" でも "\\n" でも '\n' でも '\\n' でも大差ないですが、「\s」が絡んでくるときだけややこしいので覚えておいてください。
http://note.chiebukuro.yahoo.co.jp/detail/n149597
No.1
- 回答日時:
各先頭2行ということなので、
「文字列1」と「文字列2」が抽出されるという解釈でOKでしょうか??
その前提で以下のようなコードを書いてみました。
---------------------------------------------------
$a="文字列1\r\n文字列2\r\n文字列3\r\n";
$b="文字列1\r文字列2\r文字列3\r";
$c="文字列1\n文字列2\n文字列3\n";
// 改行コードで行ごとに分割する関数
function splitByNL( $txt ) {
// 改行コードを一度「,」(カンマ)に全て置き換え
$tmpTxt= preg_replace("[\r\n|\n|\r]", ",", $txt);
// 「,」で配列に分解
$txtArray = explode(',', $tmpTxt);
return $txtArray;
}
$aArray = splitByNL($a);
echo $aArray[0]; //1行目をecho
echo $aArray[1]; //2行目をecho
$bArray = splitByNL($b);
echo $bArray[0]; //1行目をecho
echo $bArray[1]; //2行目をecho
$cArray = splitByNL($c);
echo $cArray[0]; //1行目をecho
echo $cArray[1]; //2行目をecho
---------------------------------------------------
3行目のデータは削除している訳ではないので、
echo $aArray[2];
のようにechoすれば、3行目のデータが表示されるような形です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) googleスプレッドシートでカッコ内の文字数をカウントしたい 1 2023/01/17 15:52
- Excel(エクセル) エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい 1 2022/10/06 21:48
- その他(プログラミング・Web制作) テキストエディタで複数行にわたる文字列の行頭に番号を振る方法 4 2023/03/11 12:57
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Excel(エクセル) Excel>マクロ>特定のセルで同じ情報が登録されている行を1行にまとめたい(文字連結) 6 2023/01/05 16:30
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- gooブログ Twitterの動画画面をgooブログに埋め込めない 4 2022/06/03 16:40
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Excel(エクセル) Excel 複数列のある文字を優先して1列に表示したいです 2 2022/12/03 12:07
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ダブルコーテーション(
-
(から)までの文字列を削除したい
-
文字列関数について
-
上手い置換方法は?
-
DB情報をもとにRSS作成したい
-
PHPの¥
-
PHPでjavascriptを書き出すとき...
-
VBSで"をエスケープする文字は?
-
PHPでCSVを出力する際のセルに...
-
2バイトローマ数字小文字につ...
-
VBAのコマンドボタンの文字列の...
-
COBOLの改行
-
ソースコードの1行が長いとき...
-
文字の入力で横バー上段、中断...
-
JavaDoc コメントの改行について
-
カンマの含まれる文字列の数値...
-
C++で空Enterの入力を判...
-
jsp 改行コードで改行させて表...
-
秀丸の正規表現で複数行にわた...
-
ファイルから読み取った改行文...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルコーテーション(
-
VBSで"をエスケープする文字は?
-
○分から○時間○分に変換
-
文字列の置換をCStringで(C++)
-
PHP・Wordpress preg_replaceを...
-
PHPの¥
-
php 正規表現で、\\マークを取...
-
nl2brが効かないのですが・・・
-
近似した文字列を置換するエク...
-
文字列の括弧について(初心者)
-
ダブルクォーテーションが置換...
-
(から)までの文字列を削除したい
-
c# string型の変数に、ダブルク...
-
PHPで任意の数の行抽出
-
【php】二進数をフラグとして扱...
-
【PHP】preg_replace() で正...
-
2バイトローマ数字小文字につ...
-
文字列から、特定の文字を削除...
-
PHPで文字列をエンコード↔デコ...
-
SQLインジェンクション対応...
おすすめ情報