正規表現-すべてに一致


278

どうしても(空白を含む)完全に一致する式を作成するにはどうすればよいですか?
例:

正規表現: _____羊を購入しました。

一致:羊を購入しました。羊を買いました。羊を5匹買いました。

を使ってみました(.*)が、うまくいかないようです。

更新:私はそれを動作させました、明らかに問題は正規表現ではなく、(。)文字がエスケープされたということだけです。


27
.*うまくいくはずです。実際のコードを貼り付けられますか?
Jacob Eggers、2011

2
どの言語でコーディングしていますか?
ジギー

9
ドットは改行と一致しません
zee 2013

回答:


293

通常、ドットは改行以外のすべての文字と一致します。

機能し.*ない場合は、「ドットも改行に一致する」オプションを設定します(またはを使用(?s).*)。

「dotall」オプションのないJavaScriptを使用している場合は、を試してください[\s\S]*。これは、「空白または空白以外の任意の数の文字に一致する」、つまり「任意の文字列に一致する」ことを意味します。

JavaScriptでのみ機能する(他の正規表現フレーバーでは認識されない)別のオプションは、[^]*任意の文字列にも一致します。しかし[\s\S]*、おそらく移植性が高いため、より広く使用されているようです。


7
.*は一致しません\nが、\n0文字に一致するためだけを含む文字列を作成します。
Toto

1
JavaScriptを使用する場合は、変数をこのパターンに設定するときにスラッシュをスラッシュすることを忘れないでください。例:var pattern = "[\\ s \\ S] *";
アストラベア

(?s).*私の作品は、ニューラインを含むすべてにマッチしました
グジャラートサンタナ

1
/ [\ s \ S] * /の使用に問題があります。コードでそれを使用し、パターンの終わりはコメントの終わりを意味すると解釈されるため、構文エラーを引き起こすコードをコメント化する場合。次に、そのパターンを機能させるために、コメント化されたコードからそのパターンを削除する必要があります。ただし、コメントを解除すると、機能しなくなり、以前のように機能しなくなります。
Panu Logic

これは、アスタリスクで終わる正規表現の場合です。もちろん、後に*(のように/.*(?:)/)何かを追加するか、正規表現コンストラクタ(var foo = new RegExp(".*"))を使用することで簡単に回避できます。
Tim Pietzcker、2018年

177

(.*?) 何にでもマッチします-私は何年も使っています。


61
しかし、それは改行と一致しますか?
ineedahero 2016年

私はこれをSublime Textで使用しましたが、完全に機能しました。ありがとう!("title":".*?")
SCabralO 2017

8
JavaScriptでは、[\s\S]*またはを使用します[^]*
Jeff Huijsmans

わかりませんが、この表現を使用するたびに、自分のユースケースに特定の表現を作成しなかったことに罪悪感を感じています。と言ってw+も足りないので結局を使い.+ます。幸いにも、私を噛むために戻ってきていません。
Tushar 2018年

Pythonを使用して私のために
働く

89

次のいずれかを選択して記憶してください!!! :)

[\s\S]*
[\w\W]*
[\d\D]*

説明:

\s:空白:空白で\Sはない

\w:単語:単語で\Wはない

\d:数字:数字で\Dはない

(あなたが交換することができます*のために+あなたが1つの以上の文字たい場合は、[代わりの0を以上])。




ボーナス編集:

1行ですべてを一致させたい場合は、これを使用できます。

[^\n]+

説明:

^:ない

\n:改行

+:1文字以上




4

.改行または行末記号を除いて、単一の文字を検索するためです。

だから、何にでもマッチするには、次のように使うことができます: (.|\n)*?

それが役に立てば幸い!


2

(.*?)私にはうまくいきません。/* */複数行が含まれている可能性があるで囲まれたコメントを一致させようとしています。

これを試して:

([a]|[^a])

この正規表現はaまたはに一致しanything else expect aます。絶対に、それはすべてを一致させることを意味します。

ところで、私の状況では、/\*([a]|[^a])*/Cスタイルのコメントに一致します。

より簡潔な方法について@mpenに感謝します。

[\s\S]

1
JSでこれを行う最も一般的な方法は、[\s\S]スペースと非スペースに一致することです。
mpen

2

JavaScriptの場合、最良かつ最も簡単な答えは/.*/のようです。

他の人が示唆しているように、/(。*?)/も機能しますが、/。* /の方が簡単です。パターン内の()は、私が見ることができる限り、またはエンディングである限り、必要ありません。完全に一致するもの(空の文字列を含む)

非解決策:

/ [\ s \ S] /は空の文字列と一致しないため、解決策ではありません。

/ [\ s \ S] * /空の文字列にも一致します。ただし、問題があります。コードで使用すると、「* /」がコメントの終わりとして解釈されるため、そのようなコードをコメント化することはできません。

/([\ s \ S] *)/は機能し、コメントの問題はありません。しかし、/.*/よりも理解するのは長くて複雑です。


ところで。上記のコードの抜粋は、Stack Overflowが私の答えの一部をイタリック体でレンダリングするように思われますが、それは私の意図ではありませんでした。
Panu Logic

1

JavaScriptを使用している場合、ES2018はs(dotAll)フラグを追加しました。sフラグ、ドットは.改行を含むすべての文字にマッチします。

console.log("line_1\nline_2".match(/.+/s))

:一部のブラウザではまだサポートされていません。


1

2018仕様ではsフラグ(エイリアス:dotAll)が提供されているため、.改行を含むすべての文字に一致します。

const regExAll = /.*/s; //notice the 's'

let str = `
Everything
	in 	this
			string
					will
						be
	matched. Including whitespace (even Linebreaks).
`;

console.log(`Match:`, regExAll.test(str)); //true
console.log(`Index Location:`, str.search(regExAll));

let newStr = str.replace(regExAll,"🐔");
console.log(`Replaced with:`,newStr); //Index: 0

上記のコードはChromeで機能しますが、sフラグはまだFirefoxに実装されていませんが、まもなく実装されます。



0

使用をお勧めします /(?=.*...)/g

const text1 = 'I am using regex';
/(?=.*regex)/g.test(text1) // true

const text2 = 'regex is awesome';
/(?=.*regex)/g.test(text2) // true

const text3 = 'regex is util';
/(?=.*util)(?=.*regex)/g.test(text3) // true

const text4 = 'util is necessary';
/(?=.*util)(?=.*regex)/g.test(text4) // false because need regex in text

regex101を使用してテストする


0

正直なところ、回答の多くは古く、「/.*/ i」を使用して文字の内容に関係なく任意の文字列をテストするだけで十分にすべてが得られることがわかりました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.