INI ファイルの読み書きページを更新しました。
INI ファイルの読み書き – Paepoi
セクションを見つける正規表現に最初戸惑った。
EXP = r'^\[\w+\]$'
でイケると思ったけど文字列に半角スペースがあると認識できない。
半角スペースを使うなで済ませようとも思ったけど。
EXP = r'^\[[^\]]+\]$'
そうだ「閉じブラケット以外の文字列なら何でもいい」にすれば!
こんなアホな思いつきに対応できる正規表現ってやはり面白い。
とほほの正規表現入門 – とほほのWWW入門
ところで、とほほさんで見た「ブラケット内は記号の意味を失う」なんですが。
#! /usr/bin/env python3 import re # [..] にマッチさせる正規表現 EXP = r'^\[[^\]]+\]$' # EXP = r'^\[[^]]+\]$' # Python OK a = ['[test]', '[test2]', '[test3] ', ' [test4]', '[test 5]'] for s in a: if re.search(EXP, s): print(s)
Python
#! /usr/bin/env php <?php // [..] にマッチさせる正規表現 $EXP = '/^\[[^\]]+\]$/'; // $EXP = '/^\[[^]]+\]$/'; # PHP OK $a = ['[test]', '[test2]', '[test3] ', ' [test4]', '[test 5]']; foreach ($a as $s) { if (preg_match($EXP, $s)) echo $s.PHP_EOL; } ?>
PHP
#! /usr/bin/gjs // [..] にマッチさせる正規表現 const EXP = /^\[[^\]]+\]$/; //const EXP = /^\[[^]]+\]$/; // Gjs NO let a = ['[test]', '[test2]', '[test3] ', ' [test4]', '[test 5]']; for (let s of a) { if (EXP.test(s)) { print(s) } }
Gjs ダメだった。
JavaScript エンジンは複数あるので全部かどうかは試していないけど。
エスケープすれば全部イケたのでブラケット内もエスケープしたほうがいいかと。