- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:<正規表現>直書きしない文字列否定)
<正規表現>直書きしない文字列否定
このQ&Aのポイント
- Objective-Cの正規表現で、「引数内に関数が使用されていない関数」をマッチさせたい場合、どのような正規表現を使用すれば良いでしょうか。
- 具体的な例として、検索対象文字列とマッチさせたい文字列を示します。
- 関数名を直書きせずに、いろいろな関数名に対応する正規表現を組みたいと考えています。どのような正規表現が適切でしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
あ, 念のためですが, 「本来の正規表現では不可能」というのは, 主にかっこの問題です. つまり, 正規表現だと IF((A1+B3)/(C2+5) > 3; 7; 1) とかいうばあいに 「IF((A1+B3)」 だけを取り出しちゃったりするんですね. 逆に言えば, 「括弧は関数のためだけにある」というならできるような気がします.
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答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)]*\) ではダメでした。 例題の対象文字列で、たまたま上手く出来ていただけでした。 当方の確認不足です。すみません。 不可能だと言う事が分かっただけでも助かりました。別の方法を検討してみます。 ありがとうございました。
お礼
なるほど「本来の正規表現では不可能」はそう言う意味だったのですね。 確かに「括弧は関数のためだけにある」と言うルールがあれば出来そうですね。 こんな感じでしょうか。 [A-Za-z]{2,5}\([^\(\)]*\) しかし括弧は必要なのです… 再回答ありがとうございます。 もう少し悩んでみます。
補足
正規表現を使って一発で検索する事を断念しました。 関数の「(」から、「(」と「)」の数を数えていけば関数の「)」を判別できそうです。 そして、関数の「(」から「)」までの間に関数が使われていないかチェックする。 この繰り返しで「引数で関数が使われていない関数」を見つけ出す事にしました。 泥臭いのですが今のところ他に思い付かないのでコレで行こうと思います。 ご回答ありがとうございました。