Skip to content

Monthly Archives: 二月 2014

C#中用正则表达式取页面下拉菜单(select)中的值

 

给几个在C#中,使用正则表达式取页面下拉菜单(select)中的值示例:

//取html中全部 select 的 name
Regex reg_name = new Regex(@"(?<=<select name="").*?(?="")");

//取html中全部<select>项的值
Regex reg_select = new Regex("(?is)<select name=*.*?>]*.*?</select>");

//取html中一个 select name 等于"Status"的值
Regex status = new Regex(@"(?is)<select name=""status"">]*.*?</select>");

 

一下是一段完整的代码和方法,取html中一个下拉菜单 select name 等于”Status”的中值,添加到DropDownList中:

        string strDoc = (你的html);

        //取html中一个下拉菜单 select name 等于"Status"的中值
        Regex status = new Regex(@"(?is)<select name=""status"">]*.*?</select>");
        MatchCollection mc_status = status.Matches(strDoc);
        getSelectOptions(mc_status, cmbStatus);

        /// <summary>
        /// 取select对列表复制
        /// </summary>
        /// <param name="selected"></param>
        /// <param name="cmb"></param>
        void getSelectOptions(MatchCollection selected, ComboBox cmb)
        {
            if (selected.Count < 1)
                return;
            txtValues.Text = "";
            txtValues.Text = selected[0].Value.Replace("</option>", Environment.NewLine);
            string tmpTxt = "";
            foreach (string s in txtValues.Lines)
            {
                if (s == "")
                    continue;
                string a = "";
                a = s.Replace(""", "").Replace("<option value="", "");
                int x = a.LastIndexOf(">");
                tmpTxt += a.Substring(x + 1) + Environment.NewLine;
            }
            txtValues.Text = tmpTxt.Trim();
            cmb.Items.Clear();
            cmb.Items.AddRange(txtValues.Lines);
            cmb.SelectedIndex = 0;
            cmb.Size = cmb.PreferredSize;
        }

 

推荐一个正则表达式测试/验证工具 – http://bohu.net/blog/8814

 

推荐一个正则表达式测试/验证工具

这几天代码里用到很多正则表达式,需要验证,直接在程序里调试太麻烦。

比如:C#中用正则表达式取页面下拉菜单(select)中的值 – http://bohu.net/blog/8815

 

找到了这个验证工具:

正则表达式测试器 – http://deerchao.net/tools/regex_tester/index.htm
说明:该工具允许你测试和分析正则表达式。

解决 webBrowser DocumentCompleted 的多次调用

winform中使用webBrowser抽取页面中的一些数据。断点“webBrowser1_DocumentCompleted”发现,跑进来了好多次。

DocumentCompleted执行多次,跟踪发现ReadyState状态不一样,分别是Intercative和Complete。

而MSDN对这两种状态值的解释是:

  • Complete该控件已完成新文档及其所有内容的加载;
  • Interactive该控件已经加载足够的文档以允许有限的用户交互,比如单击已显示的超链接。

增加判断“ReadyState”之后继续,DocumentCompleted仍然执行了两次,但ReadyState状态一样都是Complete。再查原因。

MSDN对其解释是在多个的帧的情况下DocumentComplete获取触发多次。并非每个框架将触发此事件,但触发DownloadBegin事件的每个框架将触发相应的DocumentComplete事件。

 

最后webBrowser1_DocumentCompleted中的代码是:

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            string BrowserUrl = webBrowser1.Url.ToString();

            if (String.IsNullOrEmpty(BrowserUrl)) //检查未赋值或空值
                return;
            if (BrowserUrl.Equals("about:blank")) //是否为空白页
                return;
            if (webBrowser1.ReadyState != WebBrowserReadyState.Complete)  //状态为完成
                return;
            if (e.Url.ToString() != BrowserUrl)  //检查事件url和webBrowser的url
                return;
            if (webBrowser1.DocumentText == "")
                return;

            ... ...
        }

 

还有一点,就是窗体打开就加载webBrowser1,如放在 Form_Load 会使程序界面加载很慢,建议放在 Form_Shown中(每当窗体第一次显示时发生)。

 

解决DirectAdmin(DA) 中 WordPress 更新失败的问题

在DirectAdmin下更新WordPress版本,主题或插件时, 经常出现: “下载失败。 文件流的目标目录不存在或不可写。”的错误提示.

或者是模板,插件”无法删除xxx。”等问题。

这跟文件权限的设置有关,处理方法如下:.

 

先进入DirectAdmin后台,选择域名站点,在进入”File Manager”.

20140205221715

然后进入“wp-content”文件夹下,勾选”plugins“,”themes“,”upgrade“,”uploads“等有问题的文件夹。

20140205221838

在下面的”set Permission“后设置权限”777“或者”755“, 勾选后面的”Recursive“遍历选项,再点击”set Permission“按钮。

20140205221510

然后可以尝试下更新或删除是否正常。

如果还不行, 可能是文件权限的所有者改变了,可以点击”Reset Owner“,

20140205221439

重置文件所有者再试一次。

一般问题都可以解决了。

—————————————————

再者就是主机服务商的一键脚本安装wordpress时引发的 在DirectAdmin或者cPanel虚拟主机通常带的快速安装wp脚本,如果不进行特殊设置会在wp-config.php文件里面加入 “WP_TEMP_DIR” 属性,此属性虽然有助于确定wordpress下载升级包或者插件时所用的路径但是也有缺点。 也就是说如果你在更换空间时忘记修改了此属性的绝对路径就会出现以上的错误

解决办法是:空间更换完毕后自行修改wp-config里的此项属性所对应的缓存目录的绝对路径,目标文件夹权限设为777。 或者删除类似这样的代码define('WP_TEMP_DIR',      '/home/xxx.com/wp-content/uploads');

 

另一种:

通过wordpress后台,无法删除插件。甚至通过FTP也无法删除。也就是说删除之后,仍然显示在后台插件列表内。

解决方法: 通过Secure Shell (SSH)删除

这主要是因为插件有隐藏/嵌套的文件,没有出现在FTP.

使用 SSH 访问博客

  1. 通过SSH登录站点。
  2. 使用 SSH 命令浏览 “../wp-content/plugins/”。
  3. 使用 ls -al 查看文件的完全列表。Briefly unavailable for scheduled maintenance - 10 Most Common WordPress Errors (+Solutions)
  4. 通过 rm (文件名)删除部分文件.

Linux下查询端口占用的进程pid

 

今天在CentOS下安装学习Jexus, 装好启动失败.  发现80端口占用了,才想起已经安装了amh.

于是按照windows下”netstat -a”, 查看网络端口连接.  但是显示的列表十分长, 不好查找…

加参数 , 发现几个容易查看的参数命令.
1. 不过滤显示

netstat -lnp

2.过滤. 最方便的,只显示80

netstat -lnp | grep "80"

3.使用 lsof 查询. 没有的话先安装

#yum install lsof #[安装lsof]
lsof -i:80

知道占用端口的进程后修改,可以终止进程:kill pid. 或者修改启动端口.