PHPで括弧内のカンマを別の文字に置換したいのですが、どのようにしたらよいか困っています。
条件は次のとおりです。
------------------------------------------------------------
対象文字列:(**,**,**,…)
対象文字列は、「(),」を含めすべて全角です。
**の文字数は、0~nです。
**には、「(),」の文字は含まれません。
括弧は、「(**,**(**,**,**,…),**)」のように、入れ子になることがあります。入れ子の階層には特に制限はありません。
カンマ「,」を別の文字(例えば「$$comma$$」)に置換したい。
------------------------------------------------------------
preg_replace()で実現できるものでしょうか。
ご教示の程よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
$括弧階層数 = 0;
$置換文字列 = '';
foreach(str_split($対象文字列) as $c){
_ if ($c == 括弧開き) $括弧階層数++;
_ if ($c == 括弧閉じ && $括弧階層数 > 0) $括弧階層数--;
_ if ($c == カンマ && $括弧階層数 > 0) {
_ _ $置換文字列 .= 別の文字;
_ } else {
_ _ $置換文字列 .= $c;
_ }
}
ご回答ありがとうございます。
シンプルにできそうです。
後ほど試してみます。
実装時は、str_splitをマルチバイト対応で組めばよいですよね。
No.2
- 回答日時:
ちょいと調べてみた.
再帰的パターンを作る (?R) と preg_replace_callback の組み合わせでできるかもしれん.
例えば
https://bbs.archlinux.org/viewtopic.php?id=47542
みたいな感じ.
ご回答ありがとうございます。
ご紹介いただいたページを拝見しました。
#4の方が提示されているコードでしょうか。
リテラシー不足で申し訳ないのですが、このコードは、[i]*[/i]で囲まれた文字列を、入れ子を構造を考慮し、<span style="font-style: italic;">*</span>に置換する内容でしょうか。
No.1
- 回答日時:
入れ子があって対で処理しなくちゃいけないとなると正規表現での一発処理は難しいかも
当然
(**,**)**,**,**(**,**)
↓
(****)**,**,**(****)
としたいんですよね?
最初にあらわれた「(」から「)」が同じ数現れるまでを探さないといけないので
結構な再起処理になるかも
(**,**(**,**,**(**,**)
のように必ずしも閉じているとは限らないわけですから・・
ご回答ありがとうございます。
正規表現の置換を何回かしてできればと思っていますが、
やはり、XMLの構造解析みたいなことしないといけないのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- オープンソース csvデータのダブルクォーテーションで囲まれた文字内にあるカンマを削除したい 3 2022/09/02 15:17
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Excel(エクセル) 条件式書式の設定 3 2023/07/04 05:34
- フリーソフト フォルダ、ファイル名の一括変換について 3 2023/03/16 09:23
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- フリーソフト サクラエディタの正規表現(grep機能)の使い方 3 2022/06/22 10:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c# string型の変数に、ダブルク...
-
(から)までの文字列を削除したい
-
【php】二進数をフラグとして扱...
-
独自タグに囲まれた文字列の変換
-
PHPで「,」を「, 」へ置換した...
-
文字列の置換をCStringで(C++)
-
VBSで"をエスケープする文字は?
-
mcryptで英数字(12未満)のみに...
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
テキストファイルから改行コー...
-
エスケープ文字の復帰(¥r)と...
-
文字の入力で横バー上段、中断...
-
グレープシティのSPREAD...
-
エクセルのCOUNTIFが正しくカウ...
-
UTF8メールがLotus Notesで文字...
-
jsp 改行コードで改行させて表...
-
ExcelVBAでメールを作成してメ...
-
C++で空Enterの入力を判...
-
csobjというタグについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルコーテーション(
-
VBSで"をエスケープする文字は?
-
PHP・Wordpress preg_replaceを...
-
文字列の置換をCStringで(C++)
-
○分から○時間○分に変換
-
文字列の括弧について(初心者)
-
近似した文字列を置換するエク...
-
PHPの¥
-
ダブルクォーテーションが置換...
-
php 正規表現で、\\マークを取...
-
(から)までの文字列を削除したい
-
文字列のアスタリスク置換
-
htmlspecialchars関数でエスケ...
-
nl2brが効かないのですが・・・
-
PHPでCSVを出力する際のセルに...
-
c# string型の変数に、ダブルク...
-
正規表現で<BR>の行を除外した...
-
ダブル、シングルクォーテーシ...
-
空白文字のカンマへの変換について
-
【PHP】preg_replace() で正...
おすすめ情報
私のケースの場合、
$regex = '#\[i]((?:[^[]|\[(?!/?i])|(?R))+)\[/i]#';
をどう作ったらよいのでしょうか。
Ogre7077様
所望の結果が得られました。
ありがとうございます。