5

正規表現でどのように言うか:

大文字で始まり、少なくとも1つのスペース文字を含み、ストリング
" _ "(スペースアンダースコアスペース)を含まず、ストリング「!!!」で終わるストリングの任意の部分。(引用符なし)?

「含まない」部分に問題があります。

これが私がこれまでに持っているものです:

[A-Z].* .*!!!

これを変更して「'_'を含まない」も指定するにはどうすればよいですか?

特定の文字列「_」である必要はありません。文字列を「含まない」とはどうすればよいですか?たとえば、「犬」が含まれていませんか?

編集:ソリューションをPhpの「preg_replace」と互換性があるようにしたい

編集:例:

「_」の例:

Abc xyz !!! <---一致

こんにちは世界!!!<---一致

_スペースアンダースコアスペースがあります!!! <---一致しません

「犬」の例:

なんて犬だ!<---一致しません(「犬」を含む)

こんにちは世界!!!<---一致

4

7 に答える 7

2

式は、直後に。が続かない場合にのみx(?!y)一致します。だから、これはあなたが望むもののようです:xy

[A-Z](?!%s)(.(?!%s))* (.(?!%s))*!!!

%s禁止されている文字列はどこにありますか。

于 2010-10-19T08:39:30.190 に答える
1

このために考えられる正規表現は、おそらく2つの正規表現よりもはるかに複雑です。あなたのようなもの:[A-Z].* .*!!!そして2番目は一致した文字列に適用され、_含まれているかどうかをチェックします。

于 2010-10-19T08:04:29.600 に答える
0

任意の資本から始めます。アンダースコア、スペースを除くすべてのオプションの文字列、およびアンダースコアを除くすべての文字列と、それに続く3つの感嘆符があります。

[A-Z][^_]*[ ][^_]*!!!
于 2010-10-19T08:04:33.570 に答える
0

最初に文字列をテストして、「_」が出現するかどうかを確認します。これは一致しないためです。次に、必要なものを確認します。

これは、1つの正規表現を理解するために多くの時間を費やす代わりに、私が行うことです。

これがあなたの表現をテストするための素晴らしいサイトです:Nregex

編集:私はあなたの質問についてもう少し読んで、私の答えが本当に良くなかったのを見るので、ここに別の試みがあります。上記の式の1つの変更:

[A-Z](?! _ )(\w(?! _ ))* (\w(?! _ ))*!!!
于 2010-10-19T08:35:59.823 に答える
0
[A-Z]([^ ]*(?! _ ) ?)*!!!

編集:少なくとも1つのスペースの要件を逃しました。以下の正規表現には、その要件が含まれています。

[A-Z][^ ]* (?!_ )((?! _ ).)*!!!
于 2010-10-19T08:43:08.183 に答える
0

grep以前は、のオプションを使用して解決してい-vました(Linuxを使用している場合、および/またはを使用できる場合grep)。

したがって、何かを検索してから、興味のない部分をスキップしてください。

grep something <INPUT> | grep -v uninteresting

grepなし(いまいましいウィンドウ、管理者権限なし)、ただしVimあり:

vim -c "v/i'm searching for this/d" -c "g/and don't need this/d" -c "w checkoutput" <INPUT>

(これが開き、必要なものと一致しないすべての行が削除され、次に必要のないすべての行が削除され、結果がとして保存されcheckoutputます。これを確認する必要があります。)

HTH

于 2010-10-19T09:17:55.063 に答える
-1

テストと一緒に正規表現を作成できる素敵な小さなプログラムがあります。

http://software.marioschneider-online.de/?C%23%3A_RegEx_Test

于 2010-10-19T08:13:41.670 に答える