複利の逆正規表現


9

Koronkorkoはフィンランド語で複利。私たちは文字列に複利を使いたくないので、それを除外するためにできるだけ短い正規表現を見つけましょう。

大文字のアルファベットAZのみで構成される文字列を指定し、文字列に部分文字列が含まれていない場合、その文字列に一致する可能な限り短い正規表現を決定しKORONKORKOます。KORONKORKO部分文字列として含まれる文字列は、正規表現と一致しないようにする必要があります。

文字だけがA- 、Z[]-^?*+|(および)式で使用する必要があります。

これは118文字で表現できると思います。短くできますか?

注:この課題は、Ohjelmointiputka(フィンランド語)によるものです。


場合は!、使用可能な文字だった、あなたがやった可能性が^((?!KORONKORO).)*$19バイトのために。
ママファンロール

3
@MamaFunRollそれが理由 !で許されないと思う。
Alex A.

私はフィンランドのサイトで自分のやり方を試すのが面白かったです。あなたが探しているのは、入力文字列に一致/拒否する理論的な正規表現です。たとえば、サイトが唯一の使用できるようにするようだ-と、^内部の文字クラス(その^周囲すなわち暗黙の(アンカーとして使用することはできませんが)、そして全体の文字列が正規表現にマッチしている場合、一致にのみカウントされ^$て、文字列の一部が正規表現に一致する場合に文字列を一致としてカウントする通常の「正規表現」とは対照的に)
Sp3000

そのため、PHPでも機能するはずのPCRE回答を削除しましたが、この場合はほぼ間違いなく意図したものではありません。
Sp3000 2016年

PHPのereg関数によって式が有効かどうかをサイトがチェックすることを忘れていました。ohjelmointiputka.net/keskustelu/…
ゲスト

回答:


6

204文字

(K((O(R(O(NKORO)*(NK(O(RK)?)?)?)?)?)?K)*(O(R(O(NKORO)*(N(K(O(RK?[^KO]|[^KR])|[^KO])|[^K])|[^KN])|[^KO])|[^KR])|[^KO])|[^K])*(K((O(R(O(NKORO)*(NK(O(RK)?)?)?)?)?)?K)*(O(R(O(NKORO)*(N(K(O(RK?)?)?)?)?)?)?)?)?

.*KORONKORKO.*有限状態機械に変換し、有限状態機械を反転し、正規表現に戻すことによって生成されます。


なぜこれが最良の答えになったのですか?
バーリント

1

パイソン、77 79 97 118バイト

編集3: 書き換え。ネストされた先読みを使用します

^([^K]|K(?=$|[^O]|O(?=$|[^R]|R(?=$|[^O]|O(?=$|[^N]|N(?=$|[^K]|K(?=$|[^O]|O(?=$|[^R]|R(?=$|[^K]|K(?=$|[^O]))))))))))*$

正規表現101

編集2:「$ |」を追加 正規表現全体。ここで、KORONKORKOのプレフィックスが一致した場合、次に一致する項目は、文字列の終わり、プレフィックスを終了する文字、またはプレフィックスの後に何かが続く場合にプレフィックスを拡張する文字です。

この正規表現re.fullmatch()は、Python 3.4で追加されたで動作します。で使用するにはre.match()^さらに$2バイト分、パターンの最初と最後にそれぞれ追加する必要があります。

([^K]|K($|[^O]|O($|[^R]|R($|[^O]|O($|[^N]|N($|[^K]|K($|[^O]|O($|[^R]|R($|[^K]|K($|[^O]))))))))))*

Regex101リンク

以前の不正解(コメントを参照):

K|([^K]|K([^O]|O([^R]|R([^O]|O([^N]|N([^K]|K([^O]|O([^R]|R([^K]|K[^O])))))))))*

編集:シングルKを追加


2
私はこれが一致するとは思わないK
orlp 2016年

@orip-良いキャッチ。修繕。
RootTwo

最新のアップデートが失敗するKKORONKORKO
Sp3000 2016年

修正可能ですか?何か案は?
RootTwo 2016年

1
開始^と終了$は必要ありません。また、=および$許可されていません。
LegionMammal978 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.