問題タブ [regular-language]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
114 参照

c# - 正規表現、より大きな単語の一部ではない単語を見つける方法

true探している単語が見つかった場合に返される、より大きな式としてではなく、正規表現の C# に Enum があるのではないかと思います。

たとえば、「tv」という単語を探していて、文字列が「tva is big」の場合、戻り値はfalse.

私のコードは次のとおりです。

しかし、true探している単語がより大きな単語の一部である場合は返されます。

0 投票する
1 に答える
484 参照

xml - XML-スキーマタイプの正規表現または正規表現のパターン

特定の属性が有効な正規表現であるかどうかを検証したいと思います。xmlスキーマに直接組み込まれたタイプはありますxs:regexか?

それ以外の場合、有効な正規表現を定義する正規表現はありますか?

0 投票する
1 に答える
375 参照

regex - 正規表現バリアントの識別とテスト

正規表現のいくつかの実装は、微妙な点で互いに異なります。これは、それらを使用しようとすると、多くの混乱の原因となります。

これらの違いのほとんどには、文字がエスケープされるかどうかに関連するセマンティクスが含まれます。これはほとんどの場合、括弧の問題ですが、中括弧などにも当てはまります。これはおそらく、実装が見つかった言語または環境の構文の結果です。たとえば、$シンボルがある言語で変数名を示している場合、その言語で表現されている正規表現では、「行末」アンカー\$などをエスケープする必要があると予想できます。しかし、ここで混乱するのは、実際のドル記号をどのように表すかということです。Perl は正規表現をスラッシュで囲むことでこれを回避していると思います/

同様に、特定の文字自体のエスケープがあります。たとえば、\nやなどの印刷されない文字\tです。\d次に、数字や\s空白など、似たように見える一般的な文字グループがあり、数字\wだけでなくアンダースコアもカバーしていることを学びました。私は何度か\a「アルファベット」グループに使用しようとしていることに気付きましたが、これはベル文字 0x07 に一致するだけでした。

無数の正規表現の実装によって提供される機能と構文のすべての違いを理解するための単純で 1 回限りの解決策がないことは明らかです。テーブル。これはまさにこの一例vimですが、sedもちろん、私が広く使用しているプログラムのいくつかはカバーしていません.これもあり、「ワイルドカード」と呼ばれます)には、単純な正規表現の実装もあります。

私が望むのは、特定の正規表現実装に対して、その「エスケープ設定」が1つ(またはいくつかの) クエリ。

テストケースと巨大な正規表現クエリを含むファイルを作成し、それを一度実行すると、後で使用する必要がある構文が正確に表示されるように設計できると考えています。(ファイルを編集し、複数のクエリを使用して、しばらくするとひどく古くなる同じものを把握する必要があるのとは対照的に)。

誰もそのような怪物を構築しようと試みていない場合、私はこの仕事を自分で引き受けるかもしれません. それさえ可能なら。これは可能ですか?

私は例を考え出そうとしました (EOL アンカーが$またはであるかを把握するためだけでした\$) が、どの場合でも、プログラムが入力にどのように応答するかを判断するために、多数の異なる検索/置換クエリを使用する必要がありました。

編集:キャプチャとバックトラッキングを使用して何かを思いつきました。もう少し取り組まなきゃ。

更新: Notepad++ は、一般に pipe で示される OR 演算子を実装していません||Word の「ワイルドカード」も代用としては不十分で、 orがありません*。正規表現演算子 (union、concat、star) のいずれかが欠落しているということは、通常の文法を生成できないことを意味するので、これら 2 つが除外されることはほぼ確実です。

次のような入力ファイルを作成できます。

とクエリ

で置き換える

(エスケープされていない括弧がグループで、エスケープされていないパイプが or であると仮定すると) の結果が得られます。

私はこれを実行しましたvim。この出力は、次に指定された各項目と一致する単一文字を示します。つまり、エスケープされたドル記号項目は、末尾のエスケープされていないドル記号項目ではなく、実際のドル記号文字と一致するように見えます。

ゼロ文字に一致するため、アンカーで何が起こっているかを確認するのは困難$ですが、解決策を見つけるのは難しくありません。その上、それは一般的に誤解されているものではありません。私が特に心配しているのは、パイプと括弧とさまざまな括弧です。4 つの異なる型がある場合、それらのエスケープされたバージョンとエスケープされていないバージョンの 2^4 の組み合わせを使用できます。その試行錯誤は恐ろしいものです。

この出力は、一目で解析するのはそれほど難しくなく、スクリプトの一部として処理するのも非常に簡単です。残っている明白な問題の 1 つは、括弧とパイプをエスケープする必要があるかどうかを判断することです。全体の機能はそれらに依存するためです。

複数のクエリが必要になるようです。バックスラッシュ、括弧、およびパイプの巧妙に設計された寄せ集めにより、最初のクエリとの組み合わせ (最終的には 4 つの可能性のみ) を見つけ出し、それに基づいて後続のマトリックス ジェネレーター クエリを選択することが可能になる場合があります。

このようなものは、それが機能することを示しています:

クエリ

と置換する

生成されます:

  • :(eエスケープされた括弧がグループで、エスケープされたパイプが or の場合
  • :e)括弧がグループで、エスケープされたパイプが or の場合
  • (f:エスケープされた括弧がグループで、パイプが or の場合
  • f):括弧がグループで、パイプが or の場合

ただし、2 番目の入力セットに対して 2 番目のクエリが必要になるため、これはまだあまり好きではありません。設定しすぎ。「マトリックス」のコピーを4つ作るだけかもしれません。

0 投票する
1 に答える
161 参照

regex - 正規表現を使用した文字列の作成

aa セット E = {a,b} があり、a と b のすべての可能な組み合わせで構成されるスーパーセット E* があると仮定します。3 で割り切れる a の数を持つ文字列の式をどのように作成しますか? ?

0 投票する
2 に答える
571 参照

regex - 正規表現とブール論理を使用した文字列の構築||

セット{0,1}内の要素のすべての可能な組み合わせで構成されるセットE*から111が1回だけ出現する文字列を作成するにはどうすればよいですか?

0 投票する
3 に答える
3611 参照

regex - 正規表現から言語を見つけるにはどうすればよいですか?

アルファベット{a、b}で次の正規表現の言語を見つけるにはどうすればよいですか?

編集:私が狂ったように反対票を投じる前に、誰かが解決策だけでなく、これらの問題を解決するためのステップを教えてくれれば幸いです。たぶん、私が自分で残りを行うことができるように、私を1つに案内することさえあります。

ありがとう!

0 投票する
3 に答える
2357 参照

regex - アルファベット {a, b} の上に部分文字列 aba を含む文字列の正規表現を見つけますか? (形式言語論)

質問は、アルファベット {a, b} の上に部分文字列 aba を含む文字列の正規表現を見つけることを求めています。

これは、正規表現が次のようになるように、何でも aba に先行/先行できることを意味しますか?

または、質問は単に探しています:

注: U は結合を意味し、* は 0 回以上を意味します。

0 投票する
2 に答える
2547 参照

regex - 正規表現を有限オートマトンに変換するにはどうすればよいですか?

次の正規表現を有限オートマトンに変更するにはどうすればよいですか?

注: この場合、U は結合を意味します

0 投票する
2 に答える
495 参照

regex - 正規表現の同等性

次の正規表現の同等性は真ですか? なぜですか、そうでないのですか?

(ab)* u (aba)* = (ab u aba)*

*=クリーネスター

u=Union (集合論)

0 投票する
1 に答える
844 参照

computer-science - 通常の言語を識別する

私は通常の言語を特定することにかなり迷っています。

Rが正規言語の場合、A = RRの場合、Rの連結であるため、Aは正規言語であることを知っています

しかし、B = {ww| w <- R} レギュラー?

私の最初の本能はイエスでした。それは R の連結でもあるからです。しかし、それは連結のサブセットであるため、そのように証明することはできないと感じています。次に、 w は正規言語の文字列であり、シングルトンの連結であり、それらの連結であると考えていました...そのように考えると、何がそうでないのでしょうか? 今ではそうではないと言う傾向があります。正規表現が本当に見つからないからです。ポンピング補題を使ってみたかったのですが、この例に適用するのは本当に難しいです。

誰でも提案できますか?私が従うべき正しい道でさえ素晴らしいでしょうか?