对于文本处理来说,正则表达式无疑是一个非常强大的工具。但是编写和阅读正则表达式往往就不是那么一件非常愉快的事情了。本文在这里介绍另一种另类的正则表达式——VerbalExpressions,它采用函数链的方式实现了一转口语化的表达式,也能非常方便的类似正则表达式的字符串匹配功能。

         [TestMethod]
public void TestingIfWeHaveAValidURL()
{
// Create an example of how to test for correctly formed URLs
var verbEx = new VerbalExpressions()
.StartOfLine()
.Then( "http" )
.Maybe( "s" )
.Then( "://" )
.Maybe( "www." )
.AnythingBut( " " )
.EndOfLine(); // Create an example URL
var testMe = "https://www.google.com"; Assert.IsTrue(verbEx.Test( testMe ), "The URL is incorrect"); Console.WriteLine("We have a correct URL ");
}

它也有各种其它语言的版本,具体可到其主页上查看。

从上面的例子中可以看出,它是非常容易阅读的,学习门槛也相对较低。当然它的使用范围和功能应该还是不及正则表达式那么强大。虽然我认为正则表达式对于程序员来说应该是必备技能,但在某些时候,这些易读的表达式也是一种不错的选择。

VerbalExpressions ——另类正则表达式的更多相关文章

  1. 用VerbalExpressions来帮助我们写正则表达式

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用VerbalExpressions来帮助我们写正则表达式.

  2. F#之旅9 - 正则表达式

    今天,cozy群有个群友发了条正则,问正则匹配相关的问题.虽然他的问题用html selector去处理可能更好,但是我也再一次发现:我忘了正则怎么写的了! 忘掉正则是有原因的,这篇文章会简单记录下F ...

  3. [No0000FD]C# 正则表达式

    正则表达式 是一种匹配输入文本的模式..Net 框架提供了允许这种匹配的正则表达式引擎.模式由一个或多个字符.运算符和结构组成. 定义正则表达式 下面列出了用于定义正则表达式的各种类别的字符.运算符和 ...

  4. * 和 ?在 shell 命令行中与在正则表达式中的区别

    Linux 正则表达式 你有没有想过,在 shell 命令行中的 *,?和正则表达式中的*,?是否一样? 自打好多年前接触 DOS,就知道了* 和?这两个通配符(Wildcard),象 dir *.* ...

  5. 正则表达式之旅_sed_awk

    谈谈正则表达式这个东西: 我想作为一个程序员,正则表达式大家绝对不陌生. 正则表达式好像一个有限则动机.主要作用是匹配,但是同时因为这个功能,我们可以扩展很多其他用法 像很多语言都引人了正则表达式:j ...

  6. 高效率使用google,国外搜索引擎,国内顺利使用Google的另类技巧,可用谷歌镜像, 可用google学术, 如何使用robots不让百度和google收录

    Google良好的搜索和易用性已经得到了广大网友的欢迎,但是除了我们经常使用的Google网站.图像和新闻搜索之外,它还有很多其他搜索功能和搜索技巧.如果我们也能充分利用,必将带来更大的便利.这里我介 ...

  7. JS正则表达式常用总结

    正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...

  8. Python高手之路【五】python基础之正则表达式

    下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...

  9. C# 正则表达式大全

    文章导读 正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串.正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法.Regex 类表示不可变(只读)的 ...

随机推荐

  1. SSD固态硬盘使用注意事项

    SSD固态硬盘的结构和运行方式不同于传统硬盘,在购买以后强烈建议进行一些设置以达到最优的运行效能,延长SSD的使用寿命.以下第一部分是一些可以在网上找到的关于SSD硬盘相关的注意事项,已经介绍很多,这 ...

  2. 移动互联网实战--Web Restful API设计和基础架构

    前言: 在移动互联网的大潮中, Web Restful API逐渐成为Web Server重要的一个分支. 移动端和服务端的交互, 主流的方式还是通过Http协议的形式来进行. 请求以Get/Post ...

  3. dedecms搜索框制作

    <form method=" name="kwtype"> <table width="> <tr> <td widt ...

  4. Android Studio 总结

    1:添加插件 File->Setting->plugins->Browse repoistories

  5. Spring触发器配置Quartz

    参考文献:http://blog.csdn.net/liaq325/article/details/8269439 http://sundoctor.iteye.com/blog/441951 业务类 ...

  6. uva674 Coin Change ——完全背包

    link:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  7. kuangbin_MST C (POJ 2031)

    全程double精度就能过了 间接0距离不用管 prim自动连起来的 G++交的话只能用%f输出 C++的话加不加l都可以 (这么说以后用%f肯定不会错咯) 不过我不懂为什么他们的空间时间差了好多倍. ...

  8. 什么是FTP服务器

    FTP服务器,则是在互联网上提供存储空间的计算机,它们依照FTP协议提供服务. FTP的全称是File Transfer Protocol(文件传输协议).顾名思义,就是专门用来传输文件的协议.简单地 ...

  9. 关于 Graph Convolutional Networks 资料收集

    关于 Graph Convolutional Networks 资料收集 1.  GRAPH CONVOLUTIONAL NETWORKS   ------ THOMAS KIPF, 30 SEPTE ...

  10. list control失去焦点后,仍然蓝色高亮度显示

    void CReaProSet::OnNMKillfocusReaprolist(NMHDR *pNMHDR, LRESULT *pResult)//指示控件已经失去焦点 { // TODO:  在此 ...