XRX/正則表示式構建器
外觀
< XRX
您想要構建一個表單,允許您使用 XQuery 的 replace 函式快速測試替換正則表示式。
我們將使用一個 XForms 客戶端,它具有多個控制元件
- 一個測試輸入字串
- 一個要評估的正則表示式
- 一個要在替換中使用的新的字串
- 一個“提交”觸發器(按鈕)
當按下提交觸發器時,這三個字串將被髮送到伺服器,XQuery replace() 函式將被執行。結果是一個輸出文字區域,它從伺服器返回到 Web 瀏覽器。
此工具將允許您執行諸如測試您的 URL 重寫規則之類的事情。


<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ev="http://www.w3.org/2001/xml-events" >
<head>
<style type="text/css">
@namespace xf url("http://www.w3.org/2002/xforms");
body {font-family: Ariel, Helvetica, san-serif}
/* Input controls appear on their own lines. */
xf|input, xf|select, xf|select1, xf|textarea
{display:block; margin:5px 0;}
/* Makes the labels right aligned in a 150px wide column that floats to the left of the input controls. */
xf|input > xf|label, xf|select > xf|label, xf|select1 > xf|label, xf|textarea > xf|label, xf|output > xf|label
{font-weight: bold;text-align:right; padding-right:10px; width:150px; float:left; text-align:right;}
/* make the input boxes a little wider */
.xf-value {width: 200px}
</style>
<xf:model>
<xf:instance id="request" xmlns="">
<data>
<input>abcdefghi</input>
<pattern>def</pattern>
<replacement>123</replacement>
</data>
</xf:instance>
<xf:instance id="response" xmlns="">
<data/>
</xf:instance>
<xf:submission id="submit" method="get"
action="https://:8080/exist/rest/db/test/replace/replace.xq"
replace="instance" instance="response"
separator="&">
<xf:toggle case="case-busy" ev:event="xforms-submit" />
<xf:toggle case="case-submit-error" ev:event="xforms-submit-error" />
<xf:toggle case="case-done" ev:event="xforms-submit-done" />
</xf:submission>
</xf:model>
</head>
<body>
<h1>XForms Replace Tester</h1>
<xf:input ref="input">
<xf:label>Input:</xf:label>
</xf:input>
<xf:input ref="pattern">
<xf:label>Pattern:</xf:label>
</xf:input>
<xf:input ref="replacement">
<xf:label>Replacement:</xf:label>
</xf:input>
<xf:switch>
<xf:case id="ready">
<xf:submit submission="submit">
<xf:label>Submit</xf:label>
</xf:submit>
<xf:submit submission="echo-test">
<xf:label>Echo Test</xf:label>
</xf:submit>
</xf:case>
<xf:case id="case-busy">
<p>Waiting for response...</p>
</xf:case>
<xf:case id="case-submit-error">
<p>The server has returned a submit error event.</p>
</xf:case>
<xf:case id="case-done">
<xf:output ref="instance('response')/replace-result/text()">
<xf:label>Result:</xf:label>
</xf:output>
</xf:case>
</xf:switch>
</body>
</html>
如果您使用的是 eXist,只需將此檔案放在伺服器上,與您的 XForms 測試驅動程式在同一個資料夾中。
在上面的示例中,我使用了 localhost 上的一個測試資料夾
https://:8080/exist/rest/db/test/replace/replace.xq
xquery version "1.0";
declare namespace exist = "http://exist.sourceforge.net/NS/exist";
declare namespace system="http://exist-db.org/xquery/system";
declare namespace request="http://exist-db.org/xquery/request";
declare option exist:serialize "method=xml media-type=text/xml indent=yes";
(: replace demo :)
let $input := request:get-parameter('input', '')
let $pattern := request:get-parameter('pattern', '')
let $replacement := request:get-parameter('replacement', '')
return
<results>
<input>{$input }</input>
<pattern>{$pattern}</pattern>
<replacement>{$replacement}</replacement>
<replace-result>{replace($input , $pattern, $replacement)}</replace-result>
</results>
這表明您可以快速構建工具來學習諸如正則表示式處理之類的複雜函式。您還可以使用 XQuery 的 match 函式,該函式如果正則表示式與輸入字串匹配則返回 true 或 false。
此示例有兩個有趣的變體。第一個是您用一個大的文字區域替換輸入表單以對大量文字塊執行全域性替換。第二個是您用一個包含常見替換模式的選擇列表替換輸入框。
替換函式的示例可以在此處找到