2017-05-26 21 views
1

XSDにトリックを行う正規表現のパターンがありますが、読みやすさが劣ります。私のXSDを再実行した後XSDで正規表現のパターン制限を分割する

<xs:element name="short_description"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
         <xs:pattern value="|^([a-zA-Z0-9áÁâÂàÀäÄåÅöÖòÒóÓôÔøØüÜûÛùÙúÚßíÍïÏîÎìÌñÑÇç.,?()!\/çéÉêÊèÈëË +;&amp;&apos;':&quot;\n\t%#£°€@=«»¦*`´-]){1,}$"/> 
        </xs:restriction> 
       </xs:simpleType> 
</xs:element> 

ので読みやすくする(例)のために、以下のように私はそれを区切るしようとした

<xs:element name="title"> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
       <!-- Check the title with no limitation to size --> 
       <xs:pattern value="|^([a-zA-Z0-9áÁâÂàÀäÄåÅöÖòÒóÓôÔøØüÜûÛùÙúÚßíÍïÏîÎìÌñÑÇçéÉêÊèÈëË]){1,}$"/> 
       <xs:pattern value="|^([.,?()!\/ +;':`´-]){1,}$"/> 
       <xs:pattern value="|^([&amp;$apos;&quot;]){1,}$"/> 
       <xs:pattern value="|^([\n\t]){1,}$"/> 
       <xs:pattern value="|^([%#£°€@=«»¦*]){1,}$"/> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:element> 

パターンが分離されたとき、彼は最初の行だけを見ているようです。

最初のパターン(上記参照)を読みやすくする方法はありますか?あるいは、私は2番目の例で何か間違っていますか?

+0

あなたのパターンは確実に機能しますか?最初にやるべきことは何ですか? '$ apos;'は何を表しますか?あなたは '''を意味しましたか? 。?あなたは[-ZA-Z0-9áÁâÂàÀäÄåÅöÖòÒóÓôÔøØüÜûÛùÙúÚßíÍïÏîÎìÌñÑÇç、() "'、[1つの正規表現を使用する必要があるように見える/çéÉêÊèÈëË+; & 'を:N \ " \トン%#£°€@ =«»| * \! '' - ] + ''](https://regex101.com/r/GiXSXy/1)を別々のものに分割するのは同じではありません。 –

+0

はい、うまく動作し、実際には'でなければなりませんでした。 しかし、それがうまくいくかどうかは疑問を残しておいてください。あなたはそのような正規表現を持っている場合は、複数の行に分けることができますか? – Dragonix

+1

'[^ a-z0-9]'は '[^ a-z] | [^ 0-9]'に分割できません。それは機能全体を破壊し、任意の文字にマッチします。 –

答えて

1

あなたはmultiple patternsを使用することができるが、それらの間の関係は、ORのものではなく、AND:複数の<pattern>要素がセット内の単一・正規表現・を生じさせる含むXML <restriction>

。この正規表現は、<pattern>要素の内容である正規表現の "or"です。あなたは[A-Za-z]+、その後[0-9]+を持っている場合は

は、それはあなたが唯一の1つの以上の文字(最初の1)または1+桁(秒)で構成された値が許可されていることを意味します。 1文字以上の文字列または数字で構成される文字列を許可するという意味ではありません。

それは単一の制限として、パターンを書き込むために、この場合には安全である:それは安全である

  • パターンはオプションにするために(すなわち、空の一致を可能にする)こと

    <xs:pattern value="([a-zA-Z0-9áÁâÂàÀäÄåÅöÖòÒóÓôÔøØüÜûÛùÙúÚßíÍïÏîÎìÌñÑÇç.,?()!/çéÉêÊèÈëË +;&amp;&apos;:&quot;\n\t%#£°€@=«»¦*`´-]+)?" /> 
    

    注オプションのグループとパターン全体を囲むように((<PATTERN>)?

  • $apos;&apos;
  • XMLスキーマ正規表現でなければなりませんpsはデフォルトでアンカーされています。^$は使用しないでください。
  • ユニコード文字をサポートするには、\p{L}ユニコードカテゴリクラスを使用することを検討してください。
+0

ありがとう!大いに感謝します – Dragonix

+0

私はできますが、私はupvote(私は15が必要なので、残りの5)に十分な評判のポイントを持っていない – Dragonix

+0

完了、ありがとう!しかしもう1つの質問。この '\ p {L} 'は非常に面白いと聞こえますが、正規表現で実装する方法の良い例は見つかりません。私は '([\ p {L}] +)? 'を試みましたが、成功しませんでした。 – Dragonix

0

@WiktorStribiżewの助けを借りて、私は答えを見つけることができました。 '>([a-zA-Z0-9áÁâÂàÀäÄåÅöÖòÒóÓôÔøØüÜûÛùÙúÚßíÍïÏîÎìÌñÑÇç.,?()!/çéÉêÊèÈëË +;&amp;&apos;:&quot;\n\t%#£$°€@=«»¦* - -

  1. 私がそれをも改善
  2. 正規表現を使用していることのようにXSDで正規表現を分割することはできません] +) `

? - >この正規表現は、多くの文字

に1を可能にする - >それはまた空のタグ

1

複数のパターンファセットを持つことが許可されてすることができます:あなたがそうするならば、入力はそれらのいずれかと一致する必要があります。 (通常、各ファセットは制限的なルールを定義しており、すべてのファセットを満たす必要があるため、やや直感的です。)

^および$は、XSDのメタキャラクタではありません。だから私はあなたのパターンのいずれかがおそらく働くことができるかを見ることができません。

[a-zA-Z0-9...]クラスにはほとんどのLatin-1が含まれているため、除外の使用を検討することができます。[&#x20;-&#xff;-[exceptions]](例外は次の文字のリストです)あなたが除外したいLatin 1を選択します。