何かを含むことができる文字列内の有効なRFC1123ホスト名である可能性があるものに一致する正規表現を探しています。アイデアは、ホスト名である可能性のあるすべてのものを抽出することです(サブストリングがすべての要件に従って1つになることを確認することによって)-後で結果を簡単に確認できる最大長の255文字を除きます。
私は最初に思いついた:
/(^|[^a-z0-9-])([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?(\.[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*)([^a-z0-9-]|$)/i
これは、括弧で囲まれた式2の一部のホスト名と一致しますが(意図したとおり)、他のホスト名をスキップしているようです。スタックオーバーフローの問題を調べて、私はこの関連する質問を見つけました:
正のフィードバックから判断すると、答えは正しいはずです(ラベルのサイズは確認されませんが)ので、試してみようと思いました。それらの式を、前の式と同様の抽出可能な形式に変換しました。
/(^|[^a-z0-9-])((([a-z0-9]|[a-z0-9][a-z0-9-]*[a-z0-9])\.)*([a-z0-9]|[a-z0-9][a-z0-9-]*[a-z0-9]))([^a-z0-9-]|$)/i
繰り返しますが、括弧で囲まれた式2で目的の結果を返す必要がありますが、いくつかの有効な部分文字列をスキップしているように見えます。ホスト名の一部ではない区切り文字をチェックする方法に問題がある可能性があると思います。
何か案は?