Objective-Cの正規表現について質問です。
表計算ソフトなどで使う数式を検索対象文字列として、「引数内に関数が使用されていない関数」をマッチさせたいと考えています。
どの様な正規表現であれば良いかご教示頂けますでしょうか。
以下に具体例を示します。
--------------------------------------------
■検索対象文字列
=SUM(A1:A3;SUM(B1:B3);ROUND(IF(C2>10;1.234;0);2))
※数式の内容は適当です
■マッチさせたい文字列
SUM(B1:B3)
IF(C2>10;1.234;0)
■補足説明
1) 検索対象文字列の最初のSUM関数の引数内には別のSUM関数等が使用されているので除外。
2) 2番目のSUM関数の引数内には関数が使用されていないのでマッチさせる。
3) ROUND関数の引数内にはIF関数が使用されているので除外。
4) IF関数の引数内には関数が使用されていないのでマッチさせる。
■その他条件
1) 関数名は2~5文字の英字とする
例.SUM(),IF(),ROUND()など
2) 正規表現内で関数名の直書きはしない
3) セル参照式のアルファベットは必ず1文字とする
例.A1やZ30等。AB1やBZ30等は無い。
--------------------------------------------
関数の引数内に「英字2~5文字がある場合は除外する」と言う意味で、以下の様な正規表現を組んだのですが上手くいきませんでした。
[A-Za-z]{2,5}\([^([A-Za-z]{2,5})]*\)
以下の様に関数名を直書きすれば理想の結果となるのですが…
[A-Za-z]{2,5}\([^(SUM|IF|ROUND)]*\)
あくまで、いろいろな関数名に可変で対応したいと考えています。
どの様な正規表現であれば良いでしょうか。
お知恵を貸して頂ければと思います。
宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
あ, 念のためですが, 「本来の正規表現では不可能」というのは, 主にかっこの問題です. つまり, 正規表現だと
IF((A1+B3)/(C2+5) > 3; 7; 1)
とかいうばあいに
「IF((A1+B3)」
だけを取り出しちゃったりするんですね.
逆に言えば, 「括弧は関数のためだけにある」というならできるような気がします.
この回答への補足
正規表現を使って一発で検索する事を断念しました。
関数の「(」から、「(」と「)」の数を数えていけば関数の「)」を判別できそうです。
そして、関数の「(」から「)」までの間に関数が使われていないかチェックする。
この繰り返しで「引数で関数が使われていない関数」を見つけ出す事にしました。
泥臭いのですが今のところ他に思い付かないのでコレで行こうと思います。
ご回答ありがとうございました。
なるほど「本来の正規表現では不可能」はそう言う意味だったのですね。
確かに「括弧は関数のためだけにある」と言うルールがあれば出来そうですね。
こんな感じでしょうか。
[A-Za-z]{2,5}\([^\(\)]*\)
しかし括弧は必要なのです…
再回答ありがとうございます。
もう少し悩んでみます。
No.1
- 回答日時:
まず, この処理は「本来の正規表現」では原理的に不可能です. ただし, 今日では「正規表現」と言っていながらこれができたりするものもあるので, 厳密にはあなたが使っている「正規表現」に依存する部分もあります.
ところで,
[A-Za-z]{2,5}\([^(SUM|IF|ROUND)]*\)
で本当にいいんでしょうか? 例えば
=SUM(A1:A3;SUM(F1:F3);ROUND(IF(D2>10;1.234;0);2))
とかで困りそうな気がするんですが.
ご回答ありがとうございます。
ご指摘の通り
[A-Za-z]{2,5}\([^(SUM|IF|ROUND)]*\)
ではダメでした。
例題の対象文字列で、たまたま上手く出来ていただけでした。
当方の確認不足です。すみません。
不可能だと言う事が分かっただけでも助かりました。別の方法を検討してみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メールアドレスの正規表現について
-
正規表現 秀丸エディタ 行頭か...
-
C言語にパターンマッチってない...
-
文章中全ての半角カッコ ( の...
-
PS4コントローラーをPCでゲーム...
-
Chr(13)とChr(10)の違いは?
-
エクセルでアルファベットか数...
-
1文字って1バイトだったっけ?
-
MMDでavi出力が出来ない
-
履歴書の志望動機の所で、「ま...
-
C#で年月を比較する
-
4Kの外部モニターに出力すると...
-
EXCELで=より左の文字を一括で...
-
「彡」って文字はなんという文...
-
VBAでの Replace関数で、ワイル...
-
Excelで3E8を3.00E+8にしない方...
-
エクセルで文字列をtxtファイル...
-
excelで勝手に改行されます
-
Msgboxの×が押されたとき
-
コンセントの電力は入力と出力...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正規表現 秀丸エディタ 行頭か...
-
正規表現でAND検索はできる...
-
メールアドレスの正規表現について
-
vbaの正規表現で、マッチした一...
-
文章中全ての半角カッコ ( の...
-
C言語のコメントを「正規表現」...
-
C言語にパターンマッチってない...
-
正規表現です。括弧内にある複...
-
第二水準漢字が含まれるか?
-
[VBS] テキストファイルから任...
-
MFCで正規表現
-
正規表現でシングルクォーテー...
-
正規表現で、青空文庫形式の入...
-
python 正規表現
-
正規表現でカウントアップ(?)す...
-
Perl 数値にスラッシュを入れる...
-
正規表現で特定文字列の全角カ...
-
セルの長文を、正規表現で連続...
-
さくらエディタでGrep検索する...
-
正規表現で大文字小文字指定に...
おすすめ情報