質問

XSDファイルには、次のREGEXタイプがあります。

<xsd:simpleType name="Host">
    <xsd:restriction base="xsd:string">
        <xsd:pattern
            value="\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b">
        </xsd:pattern>
    </xsd:restriction>
</xsd:simpleType>

XJC経由でANTでこれから生成するとき、私は次の例外を取得しています:

  [xjc] [ERROR] InvalidRegex: Pattern value '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b' is not a valid regular expression. The reported error was: 'This expression is not supported in the current option setting.' at column '2'.
  [xjc]   line 10 of file:/.../src/META-INF/portscan.xsd

すべてのbackslash()をダブルバックスラッシュ()に変更することで、これを修正できます。

<xsd:simpleType name="Host">
    <xsd:restriction base="xsd:string">
        <xsd:pattern
            value="\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b">
        </xsd:pattern>
    </xsd:restriction>
</xsd:simpleType>

しかし、その後、マーシャリング中に検証が実行されたとき、私は次の例外を取得しています。

Caused by - class org.xml.sax.SAXParseException: cvc-pattern-valid: Value '80.245.120.45' is not facet-valid with respect to pattern '\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b' for type 'Host'.

明らかに、ダブルバックスラッシュ()は、検証が失敗することに責任があります。しかし、XJCを機能させるために単一のバックスラッシュをエンコードするにはどうすればよいですか?

編集:

ああ、今、答えが見つかった、XJC regexpでサポートされていない「 b」のように思えます。それらを除外して問題を修正しましたが、エラーなしで生成され、実行時に機能するようです。わーい! :)

ただし、これが単語の境界なしに安全であるかどうかを知っていますか?多分代替手段がありますか?

役に立ちましたか?

解決

XMLスキーマ仕様で定義されている正規表現フレーバーは、単語の境界をサポートしていません。

あなたの場合、単語の境界は必要ありません。 XMLスキーマタイプのパターンファセットは、正規表現がストリングの開始アンカーで始まったかのように、常に文字列全体に一致するように正規表現を必要とします。 ^ また \A そして、ストリングの終わりのアンカーで終わりました $ また \z. 。 XMLスキーマは常に文字列全体に一致するため、これらのアンカーを修復に使用することもできません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top