1

これは入力文字列です。$table_prefix = 'wp5t3s1tc_';これは、より大きな構成ファイルの一部です。

私はの間で何でも一致させたい''

私が使用している表現は(?<=\$table_prefix(\s{2}=\s\'))(.*)?(?=\')、ルックアラウンドがの両側の空白文字で機能する脆弱な方法のため、あまり良くありません=。構成ファイルが両側に複数のスペースで変更された場合=、式は機能しません。

私はそれがもっと似ているべきだと思っています(?<=\$table_prefix(\s*\=\s*\'))(.*)?(?=\')が、もちろんそれはうまくいきません。

誰かがこの試合を行うためのよりエレガントな方法を簡単に説明できますか?

4

2 に答える 2

0

を使用した解決策は次のとおりgrepです。あまりエレガントではありませんが、=.

では可変長アサーションが許可されていないためgrep、AFAIK では、抽出を 2 段階で実行することしか考えられません。

grep -oP '(?<=\$table_prefix).*(?='"'"')' file_name | grep -oP '(?<='"'"').*'

私は基本的に、=最初の周りのすべてのスペースを とともにキャプチャし、.'wp5t3s1tc_の後のすべてを抽出してい'ます。奇妙なの'"'"'は、一重引用符をエスケープすることです。

sedまたは、2番目の代わりに使用できますgrep

grep -oP '(?<=\$table_prefix).*(?='"'"')' file_name | sed 's/ *= *'"'"'//'

于 2012-05-03T06:02:34.017 に答える
-1

一致させようとしているシーケンスに'文字が表示されないことが保証されている限り、ルックアラウンドを使用する必要はまったくありません。補完的な通常のセットで貪欲検索を使用できます。これにより、'文字を含まない任意の文字列に貪欲に一致する有限オートマトンが生成されます。

一重引用符で囲まれたサブシーケンスのみを解析するには、名前付きグループ(または、エンジンがサポートしていない場合は名前なしグループ。この場合、名前ではなくインデックスでグループにアクセスする必要があります)を使用します。この正規表現は、あなたが求めることを実行します。

\$table_prefix\s*=\s*'(?<match>[^'.]*)';

http://rubular.com/で確認してください

于 2012-05-02T18:19:57.417 に答える