編集
あなたの質問を読み直した後、あなたが何を望んでいるのか完全にはわかりません。一致したものだけでなく、行全体をテキスト ファイルにダンプしたいということですか?
また、他のことについてもはっきりしていません。PHPっぽいコードが含まれていますかget_list.txt
、それともPHPっぽいコードをチェックしたいファイルのリストが含まれていますか?
get_list.txt
がコードで、一致する行を にダンプしたい場合get_id.txt
、必要なのは だけですfindstr "_(" "get_list.txt" >> "get_id.txt"
。
次の回答はget_id.txt
、match
文字列 _(" match
".
パス 1
もし私があなたなら、grep -oを使ってこれを行うでしょう。for ループでも実行できますが、grep を使用するとはるかに簡単に実行できます。
grep -P -o "(?<=_\([\'\"])\w+" get_list.txt >> get_id.txt
...キャプチャするものが常に引用符で囲まれている場合、または...
grep -P -o "(?<=_\()[^\)]+" get_list.txt | grep -P -o "\w+" >> get_id.txt
...引用符で囲まれていない整数、ブール値、またはその他の引用符で囲まれていないデータ型がある場合。
パス 2
単純なバッチ スクリプトの使用を主張する場合、2 番目に効率的な方法は、JScript ハイブリッド スクリプトを使用して、JScript の正規表現マッチングを利用することです。
@if (@x==@y) @end /*
:: batch portion
@echo off
setlocal
for /f "delims=" %%I in ('findstr "_(" "get_list.txt"') do (
cscript /nologo /e:jscript "%~f0" %%I >> get_id.txt
)
goto :EOF
:: JScript portion */
var m=WSH.arguments(0).match(/_\([\'\"]?\w+/g);
for (var i=0; i<m.length; i++ ) {
WSH.echo(m[i].replace(/_\([\'\"]?/,''));
}
パス 3
あなたの例のようにテキストファイルを単語ごとに解析したいのであれば、これがあなたが探している構文だと思います。テキスト ファイルが大きい場合、これが最も遅い解決策になると思います。バッチのループが非常に遅くなる場合があるからです。
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%I in ('findstr "_(" "get_list.txt"') do (
for %%x in (%%I) do (
set word=%%x
set word=!word:_^(=!
if not !word!==%%x (
set word=!word:"=!
set word=!word:'=!
>> get_id.txt echo !word:^)=!
)
)
)