📄 main.csp
字号:
<html>
<head>
<title>Regular Expressions</title>
</head>
<style><!--
body {font-size: 12px;}
#checkbox {font-size: 10px;}
#radiobox {font-size: 10px;}
#listbox {font-size: 10px;}
#ok {bold; color=black;}
#error {bold; color=red;}
--></style>
<body>
<h3>preg_match(), preg_match_all(), <br> preg_split(), preg_replace()</h3>
<form method="post" action="">
<input type="hidden" name="submit_flags" value="yes">
<% RADIO_BOX("mode", "", G("mode"), "id=\"radiobox\"") %> 字符串匹配
<% RADIO_BOX("mode", "1", G("mode"), "id=\"radiobox\"") %> 匹配所有<BR>
<% RADIO_BOX("mode", "2", G("mode"), "id=\"radiobox\"") %> 字符串分离
<% RADIO_BOX("mode", "3", G("mode"), "id=\"radiobox\"") %> 字符串替换<BR>
正则表达式: <input type="text" name="pattern" value="<% =#G("pattern") %>" size="25">
<% CHECK_BOX("nocase", "1", G("nocase"), "id=\"checkbox\"") %>不区分大小写
<% CHECK_BOX("mline", "1", G("mline"), "id=\"checkbox\"") %> 多行模式<BR>
输入比较串: <textarea name="string" value="" cols="50" rows="3" ><% =#G("string") %></textarea><br>
输入替换串: <textarea name="repstr" value="" cols="50" rows="3" ><% =#G("repstr") %></textarea><p>
<input type="submit" name="testit" value="submit test test case">
<hr>
<% if (!strissp(G("submit_flags"))) {
#define MLIST_SIZE 4096
char errbuf[256] = "正确匹配!";
regmatch_t mlist[MLIST_SIZE];
char * plist[MLIST_SIZE];
char pattern[256] = "";
regmatch_t * pmlist = mlist;
char * string = G("string");
const char * repstr[MLIST_SIZE];
char * prep = NULL;
char * pdst = NULL;
int ret;
int len, i;
int mode = atoi(G("mode"));
/* make pattern */
sprintf(pattern, "/%s/%s%s", G("pattern"),
'1'==G("nocase")[0] ? "i": "", '1'==G("mline")[0] ? "m": "");
/* perform match */
if (3 == mode) {
char * ps;
char * pe;
ps = prep = strdup(G("repstr"));
for (i=0; NULL != ps && i<MLIST_SIZE-1; i++, ps=pe) {
if (NULL != (pe=strchr(ps, '\n')))
*pe++ = '\0';
repstr[i] = strtrim(ps);
}
repstr[i] = NULL;
ret = preg_replace(pattern, string, repstr, &pdst, 512*128, MLIST_SIZE);
}
else if (2 == mode)
ret = preg_split(pattern, string, plist, MLIST_SIZE);
else if (1 == mode)
ret = preg_match_all(pattern, string, &pmlist, MLIST_SIZE);
else
ret = preg_match(pattern, string, pmlist, MLIST_SIZE);
if (ret <= 0)
regerror(REG_GETERR(ret), NULL, errbuf, sizeof(errbuf));
%>
<table border=1>
<tr >
<td width=100>匹配结果: </td>
<td width=600 id="<% =(ret<0 ? "error": "ok") %>">
<% =$REG_GETERR(ret) %>: <% =errbuf %></td>
</tr>
<tr>
<td>模式串: <% =$mode %> </td>
<td><% =#pattern %> </td>
</tr>
<tr>
<td>匹配串: </td>
<td><pre><% =#string %></pre> </td>
</tr>
<% if (3 == mode) { %>
<% if (ret > 0) { %>
<tr>
<td>替换串: </td>
<td><pre><% =#prep %></pre> </td>
</tr>
<tr>
<td>共替换: <% =$ret %></td>
<td><pre><% =#pdst %></pre> </td>
</tr>
<% }
free(pdst);
free(prep);
%>
<% } else if (2 == mode) { %>
<% for (i=0; NULL != plist[i]; i++) { %>
<tr>
<td><% =$i %>. (-:-)</td>
<td><% =#plist[i] %> </td>
</tr>
<% }
preg_split_free(plist);
%>
<% } else { %>
<% for (i=0; i<= ret; i++) {
len = pmlist[i].rm_eo - pmlist[i].rm_so;
%>
<tr>
<td><% =$i %>. (<% =$pmlist[i].rm_so %>: <% =$pmlist[i].rm_eo %>)</td>
<td><% if (0){
char * p = strndup(string+pmlist[i].rm_so, len);
ebHtmlPrint(p);
free(p);
}
ebHtmlnPrint(string+pmlist[i].rm_so, len);
/* =%.*s, len, string+pmlist[i].rm_so */ %> </td>
</tr>
<% }
if (1 == mode)
free(pmlist);
%>
<% } %>
</table>
<% } %>
</form>
</body>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -