2012-01-28 35 views
6

私の会社では、最近、ある開発者が言語ファイルを使用せず、テキストに直接コードを挿入していることに気付きました。コード内の文字列リテラルの検索

私の考えは、少なくとも1つ以上の空白がある引用符の間の単語を検索することでした。しかし、私はちょっと、これはマッチテキストを行いますが(それは引用符の間に何も一致するように)、それは少なくとも1単語および少なくとも1空白を持っていることを必要としない

("|')(\w|\s{1,})*('|") 

で捕まってしまいました。誰か助けてくれますか?

私はこのために使用する言語はPHPです(または、私はメモ帳++検索を行うことができます)

+0

どのプログラミング言語:

"(?=[^"\n]*\w)(?=[^"\n]*\s)[^"\n]+"|'(?=[^'\n]*\w)(?=[^'\n]*\s)[^'\n]+' 

PHPで、それがどのように見えるのでしょうか? –

+0

質問に言語を追加しました – Rob

+0

興味のある引用符の中には何がありますか?言葉と宇宙以外の何か?彼らは '' foo bar baz ''のように見えますか?エスケープは許可されますか?開発者が使用していたコードはどの言語ですか(検索しているコード)ですか? – Qtax

答えて

2

あなたは「単語」やスペースが含まれている単一または二重引用符で囲まれた文字列(エスケープなし)と一致する場合あなたが使用できます。

preg_match_all("/\"(?=[^\"\n]*\\w)(?=[^\"\n]*\\s)[^\"\n]+\"|'(?=[^'\n]*\\w)(?=[^'\n]*\\s)[^'\n]+'/", $string, $matches); 
+0

ありがとうございます、魅力のように動作します!悪い私はそれをすべて読むことはできませんがすぐに正規表現を研究する時間がかかる必要があります。問題は現在、リテラル間のすべての単語を取ることだけです。 EOLの検索でこれを修正できますか? – Rob

+0

+1、文字列にエスケープを含めることはできません。可能であれば、正規表現はかなり乱雑になります。私が解決策を取り下げてしまったのは、それが失敗する箇所が増えてきたからです... –

+0

@Rob、 "それはリテラル間のすべての言葉を取ります"とはどういう意味ですか?いくつか例を挙げることができますか?文字列が複数の行にまたがっていない場合、 '[^"] 'と' [^ '] 'を' [^ "\ n]'と '[^' \ n]'に変更することもできます。 @ティム、ありがとう。そして、あなたは正しいです。エスケープがあれば、それはあなたのように、別の方法でそれを書いた方がいいでしょう。 – Qtax

関連する問題