博文

揭开正则表达式的神秘面纱(2008-08-17 17:19:00)

摘要: 揭开正则表达式的神秘面纱 关闭高亮 [原创文章,转载请保留或注明出处:http://www.regexlab.com/zh/regref.htm] 引言     正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如 表达式“ab+” 描述的特征是“一个 'a' 和 任意个 'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb' 都符合这个特征。

    正则表达式可以用来:(1)验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。(2)用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。(3)用来替换,比普通的替换更强大。

   正则表达式学习起来其实是很简单的,不多的几个较为抽象的概念也很容易理解。之所以很多人感觉正则表达式比较复杂,一方面是因为大多数的文档没有做到由浅入深地讲解,概念上没有注意先后顺序,给读者的理解带来困难;另一方面,各种引擎自带的文档一般都要介绍它特有的功能,然而这部分特有的功能并不是我们首先要理解的。

    文章中的每一个举例,都可以点击进入到测试页面进行测试。闲话少说,开始。 [ 点击下载 chm 版本] - DEELX 正则语法,包含其他高级语法的 chm 版本。 (注意:下载的 chm 版本适合用来查阅,而本文适合用来学习,建议继续阅读。) 1. 正则表达式规则 1.1 普通字符     字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号,都是"普通字符"。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。

    举例1:表达式 "c",在匹配字符串 "abcde" 时,匹配结果是:成功;匹配到的内容是:"c";匹配到的位置是:开始于2,结束于3。(注:下标从0开始还是从1开始,因当前编程语言的不同而可能不同)

    举例2:表达式 "bcd",在匹......

阅读全文(1179) | 评论:0

字符串算数表达式计算:VBscript调用(2008-07-24 19:44:00)

摘要:
  ' 别忘了引用 COM 对象Microsoft Script Control 1.0     Dim objScript As New MSScriptControl.ScriptControl     objScript.Language = "VBScript"    TextBox2.Text = objScript.Eval(TextBox1.Text).ToString    ......

阅读全文(1452) | 评论:0

如何:实现 Dispose Finalize 模式 (Visual Basic)(2008-06-02 21:23:00)

摘要:如何:实现 Dispose Finalize 模式 (Visual Basic) Dispose Finalize 模式可确保当不再需要对象时释放资源。 示例 下面的示例中的 ResourceClass 类利用了托管和非托管资源,然后使用 DisposeFinalize 模式来适当地释放它们。这些资源及它们的功能如下: Dispose 方法的实现,该方法允许类的使用者释放类实例。此方法调用 Dispose(True) 来释放对象的资源,然后调用 SuppressFinalize 以防止终止代码执行第二次。 基本 Finalize 方法的重写,该方法允许公共语言运行库 (CLR) 垃圾回收器来释放类实例。此方法调用 Dispose(False) 来释放对象的资源。请注意,如果以前为对象调用了 Dispose,那么,它对 SuppressFinalize 的调用将使垃圾回收器无法调用 Finalize 方法。 Dispose 方法的重载,该方法执行释放操作。它接受 Boolean 参数 disposing,该参数指明您的代码是否已开始对象的释放过程。当您释放对象时,必须要释放它的所有资源。当 CLR 垃圾回收器释放对象时,只有非托管资源必须得到释放;垃圾回收器会在必要时自动释放托管资源。 有关更多信息,请参见对象生存期:如何创建和销毁对象。 Visual Basic 复制代码 Public Class ResourceClass Implements IDisposable Private managedResource As System.ComponentModel.Component Private unmanagedResource As IntPtr Protected disposed As Boolean = False Public Sub New() ' Insert appropriate constructor code here. End Sub Protected Overridable Overloads Sub D......

阅读全文(2139) | 评论:0

VB.NET实现PC与掌上电脑PPC的双向通信(2008-05-03 17:31:00)

摘要:VB.NET实现PC与掌上电脑PPC的双向通信 作者:窦瑞欣    点击数:343    文章来源:天极开发    更新时间:2007-8-13     本文介绍如何利用VB.Net 通过Windows Sockets (Winsock)以及多线程编程进行桌面电脑与Pocket PC(掌上电脑,简称:PPC)间的双向通信,并且通过当今流行的.net平台编程语言Visaul Basic.Net 2003编写PC端和PPC端程序实现两者的信息交换。

  一、概述

  如今移动计算设备越来越普及,而PPC与桌面电脑的数据交换更是其必不可少的功能。笔者根据实际的无线PPC开发认为,PPC程序与桌面程序进行通信,除了可以通过SQL Server CE提供的RDA(远程数据存取)和Replication(复制)来完成与桌面SQL Server的数据存取外,另外一种比较方便快捷的方法则是通过Socket与桌面电脑完成信息的交换。
 
  采用Visaul Basic.Net 2003进行PPC和桌面电脑的程序编写,VB.Net已经完全不同于过去的VB,它的诸多新特性以及依托.Net平台强大的面向对象体系使VB.Net焕然一新,不仅编写桌面程序更加轻松快捷而且更可快速的、可视化的开发以Pocket PC为平台的智能设备程序。

  .Net框架是一种新的计算平台,可以简单理解为组件库或者类库,类似于MFC和VCL,但是却比它们更加强大和易用。.NET框架具有两个主要组件:公共语言运行库和 .NET 框架类库。公共语言运行库是 .NET 框架的基础,可以将运行库看作一个在执行时管理代码的代理,它提供核心服务(如内存管理、线程管理和远程处理等)。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。.NET 框架类库是一个与公共语言运行库紧密集成的可重用的类型集合,该类库是面向对象的,.NET 框架类库能够完成一系列常见编程任务,包括诸如字符串管理、数据收集、数据库连接以及文件访问等任务。

  .Net框架精简版是完整.Net框架的子集。它是对完整的 .Net框......

阅读全文(1468) | 评论:0

Visual Basic.NET实现主/从数据表视图(2008-05-03 17:28:00)

摘要: Visual Basic.NET实现主/从数据表视图 作者:胡勇智    点击数:391    文章来源:计算机与信息技术    更新时间:2007-8-14     摘 要 主/从数据表是浏览关联数据表的有效模式,本文简单介绍了实现主/从数据表视图的两种方式。

  关键词 主从数据表、Dataset、Data Grid、关联

  一、简介

  在以数据库为中心的应用程序中,主/从数据表视图是一种非常常见的设计模式。在这种模式下,顶级数据(主表)显示在一个用户界面元素中(如Data Grid),而与之相关的细节数据(从表)则根据主表的选择作相应的变化更新。例如:我们可以查看出版社已出版图书的信息列表,当选择某种图书时,在从表中立即显示出该图书的销售情况。

  在.NET中实现主/从数据表模式一般有两种方式,一是利用一个Data Grid控件装入两个相关的数据表,二是采用两个Data Grid控件实现主从模式。为便于说明,我们采用SQL Server 2000自带的Pubs数据库的Titles表和Sales表进行演示,其中Titles表记录了某出版社的图书目录,而Sales表则是每种图书的销售数据,两张表中都包含title_id列。

  二、一个Data Grid中装入多个相关表

  我们都知道,将Data Grid的Data Source属性同Dataset相绑定,即可将数据表显示在Data Grid中,但不少初学者并不清楚:通过向Dataset中添加多个Data Table对象,每个Data Table对象装入一张表,再设定好关联,即可在Data Grid中显示多张关联表。

Imports System.Data.SqlClient
’引用SqlClient命名空间
Public Class Form1
Const Connection String As String = "integrated security=sspi;initial catalog=Pubs; data s......

阅读全文(2313) | 评论:0

多线程、Socket技术及委托技术的关系(2008-05-03 17:24:00)

摘要:多线程、Socket技术及委托技术的关系 作者:xuanner    点击数:247    文章来源:天极论坛整理    更新时间:2007-9-20     这几天忙着开发一个竞赛软件,要求一个前端的显示,幕后操控前端显示给竞赛者,这就要用到多线程、Socket技术及委托技术。于是在网上找了一些关于Socket技术的资料,加上学过的线程的一点知识,开始我的整合编程。深知自己一直都对VB没怎么兴趣的,感觉他不是真正的编程,VB是易学,易懂,易理解,想想还是花点时间学下,感觉有一天会有用的,于是一时心血来潮,凭着自己埋头苦干的边学东西边做软件,还好有其他编程软件的一点经验吧,没走偏了,一直都很想写个文章做个纪念,最令我深刻的、学到最有用的东西也就是多线程、Socket技术、委托技术。现在开始我的VB编程:   第一步:什么是多线程?如果一个窗体里创建一个线程,他就是一个多线程,是两个线程的多线程,窗体显示及控件的管理本身就有一个线程控件,叫UI线程(自己理解应该是用户界面的线程吧!!呵呵),是主线程,而创建的线程则是子线程。那么什么是Socket呢?Socket就是套接字,通过Socket,有可以作为Server端的Socket,也有作为Client端的Socket,服务端开启一个子线程来监听客户端发来的所有信息,并可以发送回信息,实现数据双向通信。聊天软件很多都是基于Socket的编写出来的。好了,什么是委托技术呢?简单的说是就有一个人,他没有能力完成想要做的事,出钱委让给别人去完成,像某某公司经理要求你开发个竞赛软件,他本身没有能力去完成这样的事,所以出钱让你去完成。好了,明白了是什么后,接下来写下一些代码吧!!!!!   第二步:多线程例子   VB中多线程可以传值 Dim th as System.Threading.Thread
th = New System.Threading.Thread(Addressof 对象名(或类名).方法)
对象名(或是类名).属性 = 值   ......

阅读全文(3468) | 评论:0

VB.NET利用OBEX协议实现红外线文件传输(2008-05-03 17:18:00)

摘要:VB.NET利用OBEX协议实现红外线文件传输 作者:白猫黑爪子    点击数:322    文章来源:天极开发    更新时间:2007-8-14     十一月开始没有做什么项目,每天站在在办公室窗前静静地看着楼下的行人来来往往,然后等待着领工资的时刻。为了让智慧的大脑不因无所事是而僵硬,我决定找点伤脑筋的事情来维持脑袋的正常运转。经过考虑,决定用VB.net实现红外线文件传输的例程。

  一、OBEX协议浅析

  目前的红外线传输大都遵循OBEX协议,这是由微软、苹果、诺基亚等公司专门为红外线传输而制定的一整套协议规则。最新协议版本是1.3版,在官方网站上下载要20美元(有钱的可以去下,我反正是玩玩,叫我交钱是不可能的,本文中实现的依据是在网上找到的OBEX协议1.2版本的文档)。协议文档的第二章OBEX Object Model是关键部份,实现文件传输必须对这章说明仔细研究清楚。以下先就对这章的一些关键点进行讲解。

  1、OBEX协议的对象模型

  1)OBEX协议使用一系列的数据包(header)来进行某种对象(通常是文件)的传输,其基本格式是这样的:

  <Header ID>'数据包的标识
  <Header Value> '数据包内的数据

  其中<Header ID>是个单字节(八位二进制)字符,这个字符的低六位标识数据包代表的意义,高两位表示这个数据包的总长度的表达方式,如下表:

高俩位二进制数据 意义 00 这个数据包的<header Value>是一个以空字符结尾的unicode字符串 01 这个数据包的<header Value>是一个以空字符结尾的单字节组成的字符串,<header Value>的前两个字节数据组成的16位整数表示整个数据包的长度(包括<header id>及<header value>的总长) 10 <header Value>......

阅读全文(1635) | 评论:0

“冲浪”靠边 VB2005实现RSS览尽天下事(2008-05-03 17:16:00)

摘要:“冲浪”靠边 VB2005实现RSS览尽天下事 作者:维维    点击数:298    文章来源:天极开发    更新时间:2007-8-15     “冲浪”一词在五六年前很时髦,现在则是菜鸟的代名词,老鸟们张嘴就是个性化,而最容易个性化的则是RSS。通过RSS订阅自己喜欢的内容,不再在网上盲目溜达浪费时间。各大网站也纷纷推出RSS订阅服务,网上也有不少RSS阅读器下载,不过作为程序员有必要掌握RSS阅读器的设计原理和方法。

  RSS提供给网站以一种非常简单的共享方式来和其他站点或者客户端程序共享内容。一个RSS Feed,或者可以称其为频道(channel),是一个简单的XML文件,它使用一些预定义的标记(tag)来描述站点和一些项(item)的集合。每个项提供一个标题,一个转向的URL,和对该项的描述。不同的组织开发了不同版本的RSS,不过它们非常相似。

  RSS浏览器的总览

  使用VB2005编程显示RSS Feed或者频道内容是非常简单的。本文将教会你编写一个简单的RSS浏览器。这个浏览器允许你填写一个RSS Feed的URL地址,然后它将为你取回该频道的标题,内容,描述和链接等相关信息。它也将获取和显示该Feed相关的项的列表。它将每个项的标题显示在一个listbox里,地址显示在一个LinkLabel里,项的描述和URL则显示在一个WebBrower控件里。(见图1)


图1
  为了简单起见,我将只用RSS2.0进行测试。同样的,我使用VB2005 Express Edition作为开发工具,读者可以从Microsoft公司得到这个开发工具。

  RSSItem和RSSChannel类

  两个类组成了这个RSS浏览器的核心部分:RSSItem和RSSChannel。RSSItem类是一个简单的类,它除了构造函数以外不提供其他的方法。RSSItem类简单的封装了RSS项的标题、链接和描述属性。

  RSSItem类有3个私有成员其相关属性。构造函数简单的将每个成员初......

阅读全文(1488) | 评论:0

用Visual Basic.NET编写扑克牌游戏(2008-05-03 17:14:00)

摘要:用Visual Basic.NET编写扑克牌游戏 作者:朱罗海    点击数:506    文章来源:天极网    更新时间:2007-8-30     扑克游戏林林总总,同一种游戏各地玩法亦不尽相同。编程爱好者多喜欢编写一些本地玩法的扑克游戏。那么,编写自己的扑克游戏该从何处入手呢?

  扑克游戏编程关键有两点:一是扑克牌面的绘制;二是扑克游戏规则的算法实现。初学扑克游戏编程的爱好者可从一些简单的游戏、借用一些现有资源开始。本文拟借用Windows自带的Cards.dll和简单的21点游戏为例,介绍扑克游戏编程的初步方法。

  一、 扑克牌面绘制

  Cards.dll支持Windows自带的游戏,如Solitaire(纸牌游戏)。如果我们知道如何使用Cards.dll中的API函数,那么,我们就能像Windows自带的游戏一样绘制扑克牌面。我们需要使用其中三个基本函数:cdtInit, cdtDrawExt,和 cdtTerm。并且需要两个变量:width和height用于初始化函数cdtInit进行初始化。下面给出这些接口函数的声明及参数说明。 Private width As Integer = 0
Private height As Integer = 0

Declare Function cdtInit Lib "cards.dll" (ByRef width As Integer, _
ByRef height As Integer) As Boolean

  参数说明:width,height返回牌默认宽和高,单位为pixels。 Declare Function cdtDrawExt Lib "cards.dll" (ByVal hdc As IntPtr, _
ByVal x As Integer, ByVal y As Integer, ByVal dx As Integer, _
ByVal dy As Integer, ByVal card As Inte......

阅读全文(1315) | 评论:0

VB.NET注册表编程(2008-05-03 17:13:00)

摘要:VB.NET注册表编程 作者:马金虎    点击数:402    文章来源:yesky    更新时间:2007-8-30     一.程序设计和运行的环境设置:

  (1).视窗2000服务器版

  (2). .Net FrameWork SDK Beta 2

  二.初步认识注册表:

  首先我们来了解一下注册表的组成。在注册表中,子树是主要节点,包括健、子健和值。健就是打开"注册表编辑器"后,出现在"注册表编辑器"左窗格中的文件夹,健可以包含子健和值健。子健就是健中的健,在注册表中,子健属于树和健。值健就是运行"注册表编辑器"后,出现在"注册表编辑器"右窗格中的数据字符串,他定义了当前所选健的值,值健由三个部分组成:名称、数据类型和值本身。下图就是注册表的各个组成部分:


           图01:注册表组成图表

  三.设定测试环境:

  由于注册表在视窗系统中的特殊地位,我们自己定义几个作为程序试验使用。在注册表健"SYSTEM"下面创建一个子健"A000",在此子健下面再创建二个子健"B000"和"B001"。在子健"B000"中创建一个健名称为"0001",数据类型为字符串,值为"1111";在子健"B001"中也创建一个健,名称为"0002",数据类型为字符串,值为"2222"。下图就是我们为本文中介绍的程序所设定的注册表环境:


       图02:本文中介绍的程序使用的注册表  四.VB.NET是如何创建注册表信息:

  在.Net FrameWork SDK中定义了一个名称空间--Microsoft.Win32,这个名称空间中封装了用于操作注册表的许多类,在具体的程序设计中,主要用到的是:Registry类、RegistryKey类。其中Registry类主要是提供为存取值和子健所必须的基本的子目录树。在Registry类中定义了注册表中7个主要的子目录树。其对应如下:

  Registry.ClassesRoot 对......

阅读全文(1699) | 评论:0