私はすべてを一致させることができる正規表現必要があるが、特定のパターンで始まる文字列(特にindex.php
、何次の、などindex.php?id=2342343
)
私はすべてを一致させることができる正規表現必要があるが、特定のパターンで始まる文字列(特にindex.php
、何次の、などindex.php?id=2342343
)
回答:
正規表現の専門家ではありませんが、最初から負の先読みを使用できます。たとえば、で^(?!foo).*$
始まるものとは一致しませんfoo
。
^((?!foo).)*$
(stackoverflow.com/a/406408/3964381)
正規表現:すべてを一致しますが。
foo
):
world.
終わりに):
foo
)(無POSIX準拠した摂餌、申し訳ありません):
|
記号):
foo
):
cat
):/cat(*SKIP)(*FAIL)|[^c]*(?:c(?!at)[^c]*)*/i
または/cat(*SKIP)(*FAIL)|(?:(?!cat).)+/is
(cat)|[^c]*(?:c(?!at)[^c]*)*
または(?s)(cat)|(?:(?!cat).)*
、または(cat)|[^c]+(?:c(?!at)[^c]*)*|(?:c(?!at)[^c]*)+[^c]*
)、次に言語の手段で確認します:グループ1が一致した場合、それは必要なものではありません。それ以外の場合、空でない場合は一致値を取得します[^a-z]+
小文字のASCII文字以外の任意の文字)|
:[^|]+
デモノート:改行\n
は、隣接する行への一致オーバーフローを回避するために、デモの否定された文字クラス内で使用されます。個々の文字列をテストする場合は必要ありません。
アンカーノート:多くの言語では、を使用\A
して文字列の明確な開始を定義し、\z
(Python \Z
では、JavaScriptでは$
OK)文字列の最後を定義します。
付記:多くのフレーバー(POSIX、TRE、TCLを除く)では、改行文字以外の.
すべての文字に一致します。が対応するDOTALL修飾子(/s
PCRE / Boost / .NET / Python / Javaおよび/m
Ruby)を使用し.
て、改行を含むすべての文字と一致することを確認してください。
バックスラッシュノート:あなたは(のようなエスケープシーケンスを許可するC文字列のパターンを宣言しなければならない言語では\n
、あなたはエンジンが(リテラル文字として扱うことができるように特殊文字をエスケープバックスラッシュを倍増する必要が改行のために)例えばJavaで、world\.
なりますとして宣言する"world\\."
か、文字クラスを使用します:)"world[.]"
。生の文字列リテラル(Python r'\bworld\b'
)、C#の逐語的文字列リテラル@"world\."
、またはなどのスラッシュ文字列/正規表現リテラル表記を使用し/world\./
ます。
^(?!foo$)
は、式が機能するためにドル記号が括弧内にある必要があるのはなぜですか?^(?!foo)$
同じ結果が得られると期待していましたが、そうではありません。
$
アンカーが先読み内にある場合、それは条件の一部であり、そのゼロ幅アサーションの一部です。のように外側にある場合^(?!foo)$
、それは文字列の開始直後に文字列の終了を必要とする消費パターンの一部となり、常にtrueを返すため、負の先読みは無関係になります(文字列の終了後にテキストはありません)は言うまでもありませんfoo
)。したがって、^(?!foo$)
その後に続いてfoo
いない文字列の先頭と、それに続いて文字列の末尾が一致します。^(?!foo)$
空の文字列に一致します。
cot
or の最初の出現の間の部分文字列を見つけlan
、のように一致を削除する必要がありregex.replace(myString, "^.*?(?:cot|lan)\s*", "")
ます。
^
文字セットの先頭にa を置くと、それらの文字以外のすべてと一致します。
[^=]*
すべてに一致しますが =
私がする正規表現でき必要なすべてのものと一致するが、除く外で始まる文字列を
index.php
特定のパターン(特にindex.phpをし、以下のものを、index.phpのような?ID = 2342343)
メソッドExecを使用する
let match,
arr = [],
myRe = /([\s\S]+?)(?:index\.php\?id.+)/g;
var str = 'http://regular-viragenia/index.php?id=2342343';
while ((match = myRe.exec(str)) != null) {
arr.push(match[1]);
}
console.log(arr);
var myRe = /([\s\S]+?)(?:index\.php\?id=.+)/g;
var str = 'http://regular-viragenia/index.php?id=2342343';
var matches_array = myRe.exec(str);
console.log(matches_array[1]);
または他のマッチ
let match,
arr = [],
myRe = /index.php\?id=((?:(?!index)[\s\S])*)/g;
var str = 'http://regular-viragenia/index.php?id=2342343index.php?id=111index.php?id=222';
while ((match = myRe.exec(str)) != null) {
arr.push(match[1]);
}
console.log(arr);