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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- Excel(エクセル) SUMIF関数について 4 2023/06/14 13:13
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
- Excel(エクセル) If関数に関する質問です。(再掲) 3 2022/10/01 20:51
- Excel(エクセル) Excel 特定セルの数値を参照したセルの0表示が空白にならないのはどうしてか? 3 2022/04/28 22:23
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- Excel(エクセル) Excel2019、2021の日付、曜日の表示について 2 2022/11/29 15:01
- Excel(エクセル) エクセルでIF関数中にIFERROR関数を使いたいのですが???? 5 2022/04/08 13:24
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/02/10 11:41
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現でAND検索はできる...
-
スパムメールをブロックするた...
-
正規表現 秀丸エディタ 行頭か...
-
メールアドレスの正規表現について
-
正規表現についてすっかり忘れ...
-
Mで始まりuで終わる文字列
-
(秀丸)正規表現で、特定文字列...
-
wordの何も書かれていない2ペー...
-
PS4コントローラーをPCでゲーム...
-
EXCELで=より左の文字を一括で...
-
エクセルでアルファベットか数...
-
Chr(13)とChr(10)の違いは?
-
Googleスプレッドシートでワイ...
-
棒グラフ 横軸の縦書き2列にし...
-
1文字って1バイトだったっけ?
-
EBCDIC⇒SJIS変換の方法
-
レポートについて質問します 項...
-
Excelで指数表現しないようにす...
-
「彡」って文字はなんという文...
-
VBAでの Replace関数で、ワイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正規表現 秀丸エディタ 行頭か...
-
vbaの正規表現で、マッチした一...
-
メールアドレスの正規表現について
-
[VBS] テキストファイルから任...
-
正規表現でシングルクォーテー...
-
文章中全ての半角カッコ ( の...
-
MFCで正規表現
-
[正規表現] 数字範囲をヒット...
-
Mで始まりuで終わる文字列
-
正規表現でAND検索はできる...
-
C言語にパターンマッチってない...
-
正規表現で囲まれた部分の文字列
-
正規表現です。括弧内にある複...
-
さくらエディタでGrep検索する...
-
文字列検索(grepのようなもの)...
-
正規表現で、青空文庫形式の入...
-
正規表現で一致しない(否定)場...
-
C言語のコメントを「正規表現」...
-
正規表現でカウントアップ(?)す...
-
正規表現で特定文字列の全角カ...
おすすめ情報