簡體   English   中英

XQuery regexp錯誤

[英]XQuery regexp error

為什么下一個代碼返回true(.NET的Saxon-EE 9.2)?

matches('some text>', '^[\w ]{3,200}$')

模式中沒有>符號。 謝謝。

XQuery:

<regexp-test>
    <!-- why true? -->
    <test1>{matches('some text>', '^[\w ]{3,200}$')}</test1>
    <test2>{matches('some text>', '^[\w ]+$')}</test2>
    <test3>{matches('&lt; < >', '^[\w ]+$')}</test3>
    <!-- valid: --> 
    <test4>{matches('some text!', '^[\w ]+$')}</test4>  
    <test5>{matches('.,', '^[\w ]+$')}</test5> 
</regexp-test>

輸出:

<regexp-test>
  <!-- why true? -->
  <test1>true</test1>
  <test2>true</test2>
  <test3>true</test3>
  <!-- valid: -->
  <test4>false</test4>
  <test5>false</test5>
</regexp-test>

經過eXist社區中其他成員的一些探索,試驗和幫助之后,我發現UNICODE中字符類的定義以及XPath和XML模式中正則表達式的定義中使用的字符類的定義與POSIX類不同。 特別是人物

$ + <=> ^ |〜

屬於符號類\\ p {S}而不是標點符號類\\ p {P}。 由於\\ w的定義(來自http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/datatypes-with-errata.html )為

“ [[#x0000-#x10FFFF]-[\\ p {P} \\ p {Z} \\ p {C}](除“標點符號”,“分隔符”和“其他”字符集之外的所有字符)”

這些字符將包含在\\ w中

這導致使用[^ \\ W \\ p {S}]的解決方法

我去...

我想你打算寫

matches( 'some text' , '^[\w ]{3,200}$' )

正則表達式表示要從字符串( ^ )的開頭開始,至少匹配3個字符,並且最多匹配200( {3,200} )個字符或空格( [\\w ] ),然后期望字符串的結尾( $ ) 。

因此, some text將返回true,因為它由正確的字符[a-zA-Z0-9_ ] ,其中有9個。

例如,如果匹配項是

matches( 'some text' , '^[\w ]{3,5}$' )

結果應返回false,因為它將僅匹配長度為3到5的字符串。

也許您認為\\w表示空格或其他含義?

在這種情況下, >不是字符串中的有效字符,需要用其表示法&gt;替換&gt; 我猜它正在被靜默刪除,因此正則表達式匹配。

另請參見w3schools.com:“XQuery區分大小寫,並且XQuery元素,屬性和變量必須是有效的XML名稱。” XML屬性中不允許-和>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM