正则表达式学习经验分析

正则表达式学习经验分析
正则表达式学习经验分析

正则表达式学习经验分析

正则表达式用来指定字符串模式。当你需要定位匹配某种模式的字符串时就可以使用正则表达式。例如,我们下面的一个例程就是在一个HTML文件中通过查找字符串模式来定位所有的超链接。

当然,为了指定一种模式,使用...这种记号是不够精确的。你需要精确地指定什么样的字符排列是一个合法的匹配。当描述某种模式时,你需要使用一种特殊的语法。

这里有一个简单例子。正则表达式

[Jj]ava.+

匹配下列形式的任何字符串:

首字母是J或j

后续的三个字母是ava

字符串的剩余部分由一个或多个任意字符组成

例如,字符串“javaness”匹配这个特殊的正则表达式,但是字符串“Core Java”却不匹配。

如你所见,你需要了解一点语法来理解正则表达式的含意。幸运的是对于大多数的用途,使用少量的简单构造(straightforward constructs)就已足够。

字符类是可选自符的集合,用‘['封装,比如[Jj],[0-9],[A-Za-z]或[^0-9]。这里的-表示范围(Unicode 落在两个边界之间的所有字符),^表示求补(指定字符外的所有字符)。

有许多预定以的字符类,像\d(数字)或\p{Sc}(Unicode货币符号),见表12-8和12-9。

大多数字符与它们自身匹配,像上例中的ava字符。

符号.匹配任何字符(可能行终止符(line terminators)除外,这依赖于标识设置(flag settings))

\用作转义符,比如\.匹配一个句点,\\匹配一个反斜杠。

^和$分别匹配行头和行尾

如果X和Y都是正则表达式,则XY表示“X的匹配后面跟着Y的匹配”。X|Y表示“任何X或Y 的匹配”

可以将量词(quantifier)用到表达式中,X+ 表示X重复1次或多次,X* 表示X重复0次或多次,X? 表示X重复0次或1次

默认地,一个量词总是与使总体成功匹配的最长的可能重复匹配。可以加上后缀?(称为reluctant 或stingy 匹配,用以匹配最小的重复数),和+(称为possessive或贪婪匹配,用以即使在总体匹配失败的情况下也匹配最大的重复数)来更改这种属性。

例如,字符串cab匹配[a-z]*ab,但不匹配[a-z]*+ab。第一种情况下,[a-z]*只匹配字符c,因此字符ab正好与模式的剩余部分匹配。但是贪婪版本[a-z]*+就与字符cab匹配,模式的剩余部分ab就匹配失败(,这样总体也就匹配失败)。

可以使用分组来定义子表达式。将分组封装在()中,如([+-]?)([0-9]+)。然后你可以让模式匹配符(the pattern matcher)返回每个分组的匹配,或者使用\n来回引分组(refer back to a group with \n),其中n是组号(以\1起始)

这里有一个稍微有点复杂却又很有用的正则表达式--它用来描述十进制和十六进制的整数。[+-]?[0-9]+|0[Xx][0-9A-Fa-f]+

不幸的是,在使用正则表达式的各种程序和库之间,它的语法还没有完全标准化。对基本的构造上已达成了共识,但在细节方面有许多令人“抓狂”的区别(many maddening differences)。Java的正则表达式类使用了与Perl语言类似的语法,但也不尽相同。表12-8显示了Java语法的所有正则表达式构造。要了解更多关于正则表达式的信息,请参考Pattern类的API文档,或者Jeffrey E. F. Friedl的著作《Mastering Regular Expressions》(O'Reilly and Associates, 1997)(刚去第二书店查了一下,东南大学出版社已经引入了其第二版,影印)

表12-8 正则表达式语法

--------------------------------------------------------------------------------

语法解释

--------------------------------------------------------------------------------

字符

c 字符c

\unnnn, \xnn, \0n, \0nn, \0nnn 带有十六或八进制值的代码单元

\0n 八进制0n代表的字符(0<=n<=7)

\0nn 八进制0nn代表的字符(0<=n<=7)

\0mnn 八进制0mnn代表的字符(0<=m<=3,0<=n<=7)

\xnn 十六进制 0xnn所代表的字符

\uhhhh 十六进制 0xhhhh所代表的字符

\t, \n, \r, \f, \a, \e 控制字符,依次是制表符,换行符,回车符,换页符,报警符和转义符\cc 控制字符中出现的相应字符c

--------------------------------------------------------------------------------

字符类

[C1C2. . .] C1、C2……中的任何字符。Ci可以是字符,字符范围(C1-C2)或者字符类。[^. . .] 字符类的补集

[ . . . && . . .] 两个字符类的交集

--------------------------------------------------------------------------------

预定义字符类

. 除行终止符外的任何字符(如果DOTALL标志置位,则表示任何字符)

\d 数字[0-9]

\D 非数字[^0-9]

\s 空白字符[\t\n\r\f\x0B]

\S 非空白字符

\w 单词字符[a-zA-Z0-9_]

\W 非单词字符

\p{name} 一个指定的字符类,见表12-9

\P{name} 指定字符类的补集

--------------------------------------------------------------------------------

边界匹配符

^ $ 输入的开头和结尾(在多行模式(multiline mode)下是行的开头和结尾) \b 单词边界

\B 非单词边界

\A 输入的开头

\z 输入的结尾

\Z 除最后行终止符之外的输入结尾

\G 上个匹配的结尾

--------------------------------------------------------------------------------

量词

X? 可选的X(即X可能出现,也可能不出现)

X* X,可以重复0次或多次

X+ X,可以重复1次或多次

X{n} X{n,} X{n,m} X重复n次,至少重复n次,重复n到m次

--------------------------------------------------------------------------------

量词后缀

? 设默认(贪婪)匹配为reluctant匹配

+ 设默认(贪婪)匹配为possessive匹配

--------------------------------------------------------------------------------

集合操作

XY X的匹配后面跟着Y的匹配

X|Y X或Y的匹配

--------------------------------------------------------------------------------

分组

(X) 匹配X并且在一个自动计数的分组中捕获它

\n 与第n个分组的匹配

--------------------------------------------------------------------------------

转义

\c 字符c(必须不是字母)

\Q...\E 逐字地引用...

(?...)特殊构造,看Pattern类的API

--------------------------------------------------------------------------------

正则表达式的最简单使用是测试一个特殊的字符串是否与之匹配。这里有一个Java写的测试程序。首先从表示正则表达式的字符串构造一个Pattern对象。然后从该模式获得一个Matcher对象,并且调用它的matches()方法:

Pattern pattern = https://www.360docs.net/doc/8c12319871.html,pile(patternString);

Matcher matcher = pattern.matcher(input);

if (matcher.matches()) . . .

表12.9 预定义的字符类名(Predefined Character Class Names)

--------------------------------------------------------------------------------

Lower 小写的ASII字符[a-z]

Upper 大写的ASCII字符[A-Z]

Alpha ASCII字母[A-Za-z]

Digit ASCII 数字 [0-9]

Alnum ASCII 字母或数字[A-Za-z0-9]

Xdigit 十六进制数字[0-9A-Fa-f]

Print or Graph 可打印的ASCII字符[\x21-\x7E]

Punct 非字母或数字ASCII [\p{Print}&&\P{Alnum}]

ASCII 所有ASCII字符 [\x00-\x7F]

Cntrl ASCII控制字符[\x00-\x1F]

Blank 空格符或制表符[ \t]

Space 空白符 [ \t\n\r\f\0x0B]

javaLowerCase 取决于Character.isLowerCase()的小写字符

javaUpperCase 取决于Character.isUpperCase()的大写字符

javaWhitespace 取决于Character.isWhitespace()的空白符

javaMirrored 取决于Character.isMirrored()的Mirrored(?)

InBlock 这里的Block是unicode字符的块名,用空格隔开,比如BasicLatin 或 Mongolian。块名列表参考https://www.360docs.net/doc/8c12319871.html,

Category 或InCategory 这里的Category是Unicode字符的种类名,比如L(字母)或者Sc(货币符号)。种类名列表参考https://www.360docs.net/doc/8c12319871.html,

--------------------------------------------------------------------------------

matcher的输入可以是实现CharSequence接口的任何类对象,像String,StringBuilder或CharBuffer。

当编译模式时,可以设置一个或多个标志,例如

Pattern pattern = https://www.360docs.net/doc/8c12319871.html,pile(patternString,

Pattern.CASE_INSENSITIVE + Pattern.UNICODE_CASE);

下面六个标志都是支持的:

CASE_INSENSITIVE:匹配字符时与大小写无关,该标志默认只考虑US ASCII字符。

UNICODE_CASE:当与CASE_INSENSITIVE结合时,使用Unicode字母匹配

MULTILINE:^和$匹配一行的开始和结尾,而不是整个输入

UNIX_LINES:当在多行模式下匹配^和$时,只将'\n'看作行终止符

DOTALL: 当使用此标志时,.符号匹配包括行终止符在内的所有字符

CANON_EQ: 考虑Unicode字符的规范等价

如果正则表达式包含分组,Matcher对象能够揭示分组边界。方法

int start(int groupIndex)

int end(int groupIndex)

返回某个特殊分组的起始索引和结尾后索引(past-the-end index )。

通过调用String group(int groupIndex),你可以简单地得到匹配的字符串。

第0个分组代表所有的分组,第一个实际分组的索引是1。调用groupCount来获得总的分组数。

使用开放圆括号来安排嵌套分组。例如,给定模式((1?[0-9]):([0-5][0-9]))[ap]m,并且输入11:59am,Matcher对象报告下列分组

((1?[0-9]):([0-5][0-9]))[ap]m

并输入

11:59am

matcher报告下列分组

--------------------------------------------------------------------------------

分组索引起始结束字符串

--------------------------------------------------------------------------------

0 0 7 11;59am

1 0 5 11:59

2 0 2 11

3 3 5 59

例12-9提示输入一个模式和一个欲匹配的字符串。它将输出输入的字符串是否匹配模式。如果输入匹配包含分组的模式,程序将会使用圆括号来打印分组边界,如((11):(59))am

Example 12-9. RegexTest.java

1. import java.util.*;

2. import java.util.regex.*;

3.

4. /**

5. This program tests regular expression matching.

6. Enter a pattern and strings to match, or hit Cancel

7. to https://www.360docs.net/doc/8c12319871.html,ern contains groups, the group

8. boundaries are displayed in the match.

9. */

10. public class RegExTest

11. {

12. public static void main(String[] args)

13. {

14. Scanner in = new Scanner(System.in);

15. System.out.println("Enter pattern: ");

16. String patternString = in.nextLine();

17.

18. Pattern pattern = null;

19. try

20. {

21. pattern = https://www.360docs.net/doc/8c12319871.html,pile(patternString);

22. }

23. catch (PatternSyntaxException e)

24. {

25. System.out.println("Pattern syntax error");

26. System.exit(1);

27. }

28.

29. while (true)

30. {

31. System.out.println("Enter string to match: ");

32. String input = in.nextLine();

33. if (input == null || input.equals("")) return;

34. Matcher matcher = pattern.matcher(input);

35. if (matcher.matches())

36. {

37. System.out.println("Match");

38. int g = matcher.groupCount();

39. if (g > 0)

40. {

41. for (int i = 0; i < input.length(); i++)

42. {

43. for (int j = 1; j <= g; j++)

44. if (i == matcher.start(j))

45. System.out.print('(');

46. System.out.print(input.charAt(i));

47. for (int j = 1; j <= g; j++)

48. if (i + 1 == matcher.end(j))

49. System.out.print(')');

50. }

51. System.out.println();

52. }

53. }

54. else

55. System.out.println("No match");

56. }

57. }

58. }

通常地,你不希望匹配整个输入到某个正则表达式,而是希望在输入中找出一个或多个匹配的子字符串。使用Matcher类的find方法来寻找下一个匹配。如果它返回True,再使用start和end方法找出匹配的范围。

while (matcher.find())

{

int start = matcher.start();

int end = matcher.end();

String match = input.substring(start, end);

. . .

}

例12-10用到了这种机制。它在一个网页中定位所有的超文本引用并打印它们。为运行程序,在命令行提供一个URL,比如

java HrefMatch https://www.360docs.net/doc/8c12319871.html,

Example 12-10. HrefMatch.java

1. import java.io.*;

2. import https://www.360docs.net/doc/8c12319871.html,.*;

3. import java.util.regex.*;

4.

5. /**

6. This program displays all URLs in a web page by

7. matching a regular expression that describes the

8. HTML tag. Start the program as

9. java HrefMatch URL

10. */

11. public class HrefMatch

12. {

13. public static void main(String[] args)

14. {

15. try

16. {

17. // get URL string from command line or use default

18. String urlString;

19. if (args.length > 0) urlString = args[0];

20. else urlString = "https://www.360docs.net/doc/8c12319871.html,";

21.

22. // open reader for URL

23. InputStreamReader in = new InputStreamReader(new URL(urlString).o penStream());

24.

25. // read contents into string buffer

26. StringBuilder input = new StringBuilder();

27. int ch;

28. while ((ch = in.read()) != -1) input.append((char) ch);

29.

30. // search for all occurrences of pattern

31. String patternString = "])\\s *>";

32. Pattern pattern = https://www.360docs.net/doc/8c12319871.html,pile(patternString, Pattern.CASE_INSE NSITIVE);

33. Matcher matcher = pattern.matcher(input);

34.

35. while (matcher.find())

36. {

37. int start = matcher.start();

38. int end = matcher.end();

39. String match = input.substring(start, end);

40. System.out.println(match);

41. }

42. }

43. catch (IOException e)

44. {

45. e.printStackTrace();

46. }

47. catch (PatternSyntaxException e)

48. {

49. e.printStackTrace();

50. }

51. }

52. }

Matcher类的replaceAll方法用一个替换字符串代替出现的所有正则表达式的匹配。比如,下列指令用#替换所有数字序列

Pattern pattern = https://www.360docs.net/doc/8c12319871.html,pile("[0-9]+");

Matcher matcher = pattern.matcher(input);

String output = matcher.replaceAll("#");

替换字符串可以包含模式中的分组引用:$n被第n个分组替换。替换文本中出现$时,使用\$来包含它。

replaceFirst方法只替换模式的第一次出现。

最后讲一点,Pattern类有一个split方法,它类似于字符串tokenizer。它使用正则表达式匹配作边界,将输入分离成字符串数组。比如,下面的指令将输入分离成记号(token),

Pattern pattern = https://www.360docs.net/doc/8c12319871.html,pile("\\s*\\p{Punct}\\s*");

String[] tokens = pattern.split(input);

-------------------------------------------------------------------------------- java.util.regex.Pattern 1.4

--------------------------------------------------------------------------------

方法

static Pattern compile(String expression)

static Pattern compile(String expression, int flags)

编译正则表达式字符串到pattern对象用以匹配的快速处理

参数:

expression 正则表达式

flags 下列标志中的一个或多个CASE_INSENSITIVE, UNICODE_CASE, MULTIL INE, UNIX_LINES, DOTALL, and CANON_EQ

Matcher matcher(CharSequence input)

返回一个matcher对象,它可以用来在一个输入中定位模式匹配

String[] split(CharSequence input)

String[] split(CharSequence input, int limit)

将输入字符串分离成记号,并由pattern来指定分隔符的形式。返回记号数组。分隔符并不是记号的一部分。

参数:

input 分离成记号的字符串

limit 生成的最大字符串数。

--------------------------------------------------------------------------------

-------------------------------------------------------------------------------- java.util.regex.Matcher 1.4

-------------------------------------------------------------------------------- 方法

-------------------------------------------------------------------------------- boolean matches()

返回输入是否与模式匹配

boolean lookingAt()

如果输入的起始匹配模式则返回True

boolean find()

boolean find(int start)

尝试查找下一个匹配,并在找到匹配时返回True

参数:

start 开始搜索的索引

int start()

int end()

返回当前匹配的起始位置和结尾后位置

String group()

返回当前匹配

int groupCount()

返回输入模式中的分组数

int start(int groupIndex)

int end(int groupIndex)

返回一个给定分组当前匹配中的起始位置和结尾后位置

参数:

groupIndex分组索引(从1开始),0表示整个匹配

String group(int groupIndex)

返回匹配一个给定分组的字符串

参数:

groupIndex

分组索引(从1开始),0表示整个匹配

String replaceAll(String replacement)

String replaceFirst(String replacement)

返回从matcher输入得到的字符串,但已经用替换表达式替换所有或第一个匹配参数:

replacement 替换字符串

Matcher reset()

Matcher reset(CharSequence input)

复位mather状态。

编译原理实验报告实验一编写词法分析程序

编译原理实验报告实验名称:实验一编写词法分析程序 实验类型:验证型实验 指导教师:何中胜 专业班级:13软件四 姓名:丁越 学号: 电子邮箱: 实验地点:秋白楼B720 实验成绩: 日期:2016年3 月18 日

一、实验目的 通过设计、调试词法分析程序,实现从源程序中分出各种单词的方法;熟悉词法分析 程序所用的工具自动机,进一步理解自动机理论。掌握文法转换成自动机的技术及有穷自动机实现的方法。确定词法分析器的输出形式及标识符与关键字的区分方法。加深对课堂教学的理解;提高词法分析方法的实践能力。通过本实验,应达到以下目标: 1、掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。 2、掌握词法分析的实现方法。 3、上机调试编出的词法分析程序。 二、实验过程 以编写PASCAL子集的词法分析程序为例 1.理论部分 (1)主程序设计考虑 主程序的说明部分为各种表格和变量安排空间。 数组 k为关键字表,每个数组元素存放一个关键字。采用定长的方式,较短的关键字 后面补空格。 P数组存放分界符。为了简单起见,分界符、算术运算符和关系运算符都放在 p表中 (编程时,还应建立算术运算符表和关系运算符表,并且各有类号),合并成一类。 id和ci数组分别存放标识符和常数。 instring数组为输入源程序的单词缓存。 outtoken记录为输出内部表示缓存。 还有一些为造表填表设置的变量。 主程序开始后,先以人工方式输入关键字,造 k表;再输入分界符等造p表。 主程序的工作部分设计成便于调试的循环结构。每个循环处理一个单词;接收键盘上 送来的一个单词;调用词法分析过程;输出每个单词的内部码。 ⑵词法分析过程考虑 将词法分析程序设计成独立一遍扫描源程序的结构。其流程图见图1-1。 图1-1 该过程取名为 lexical,它根据输入单词的第一个字符(有时还需读第二个字符),判断单词类,产生类号:以字符 k表示关键字;i表示标识符;c表示常数;p表示分界符;s表示运算符(编程时类号分别为 1,2,3,4,5)。 对于标识符和常数,需分别与标识符表和常数表中已登记的元素相比较,如表中已有 该元素,则记录其在表中的位置,如未出现过,将标识符按顺序填入数组id中,将常数 变为二进制形式存入数组中 ci中,并记录其在表中的位置。 lexical过程中嵌有两个小过程:一个名为getchar,其功能为从instring中按顺序取出一个字符,并将其指针pint加1;另一个名为error,当出现错误时,调用这个过程, 输出错误编号。 2.实践部分

老中医号脉大法

老中医:10分钟让你学会号脉 在临床中,基本上来个病人就把手脖伸到诊桌上让中医大夫号脉,但辩脉是很复杂的,脉学共有27种,但作为非专业人员,掌握以下几种种现象就足够了,也比较容易理解。 花10分钟,入下门还是可以滴! 平时我们经常在影视剧中看到古代中医把脉的情景,在民间的语境中,人们也把诊脉说的神乎其神,俨然一副很酷很拽的样子。最脍炙人口的故事,莫过于古代太医为皇宫里的娘娘妃子们“悬丝诊脉”,在《西游记》中,我们也看到过这样的桥段。

诊脉一直蒙着一层无比神秘而且威严的面纱,人们一方面特别对这个行为特别崇拜,一方面感到无比高深。事实上,世间任何的技巧,既然是人们发明的,都是熟能生巧,都是可以通过学习掌握的。 艾灸名媛课堂想说的是,诊脉并非那么邪乎、那么“深不可测”,如果有时间,可以花10分钟阅读这篇文章。即使成为不了诊脉高人,了解一些诊脉大致的轮廓,还是有意义的。 首先,诊脉时应对向而坐,“左手右诊之,右手左诊之。”也就是说医者用左手切患者右手的脉,用右手切患者左手的脉。 临床主要运用“寸口诊法”,即切病人桡动脉的腕后部分。寸口,又分为“寸、关、尺”三个部分,左手寸、关、尺代表心、肝、肾,右手寸、关、尺代表脾、肺、肾。如图。

脉诊独取寸口的理论根据有二:一是肺朝百脉,脉会太渊。即人体各经脉均会集于肺,而寸口为手太阴肺经的循行部位,其上之太渊穴,是脉会之处,所以有“脉会太渊”之说。二是脾胃为各脏腑气血之源,各脏腑气血之盛衰,与脾胃功能之强弱有着密切的关系,而手太阴肺经亦起于中焦睥功能之状况。因此,全身脏腑经络气血之盛衰,都可以从寸口脉上反映出来。 脉搏呈现部位浅。轻取即得,重按反觉稍减。此脉多属外感表证,表明病位在表,浮紧为表寒,浮数为表热,浮而有力为表实,浮而无力为表虚。常见于伤风、感冒及多种传染病的初期。 常见脉相及其对应的疾病

实验1-3-《编译原理》词法分析程序设计方案

实验1-3 《编译原理》S语言词法分析程序设计方案 一、实验目的 了解词法分析程序的两种设计方法之一:根据状态转换图直接编程的方式; 二、实验内容 1.根据状态转换图直接编程 编写一个词法分析程序,它从左到右逐个字符的对源程序进行扫描,产生一个个的单词的二元式,形成二元式(记号)流文件输出。在此,词法分析程序作为单独的一遍,如下图所示。 具体任务有: (1)组织源程序的输入 (2)拼出单词并查找其类别编号,形成二元式输出,得到单词流文件 (3)删除注释、空格和无用符号 (4)发现并定位词法错误,需要输出错误的位置在源程序中的第几行。将错误信息输出到屏幕上。 (5)对于普通标识符和常量,分别建立标识符表和常量表(使用线性表存储),当遇到一个标识符或常量时,查找标识符表或常量表,若存在,则返回位置,否则返回0并且填写符号表或常量表。 标识符表结构:变量名,类型(整型、实型、字符型),分配的数据区地址 注:词法分析阶段只填写变量名,其它部分在语法分析、语义分析、代码生成等阶段逐步填入。 常量表结构:常量名,常量值 三、实验要求 1.能对任何S语言源程序进行分析 在运行词法分析程序时,应该用问答形式输入要被分析的S源语言程序的文件名,然后对该程序完成词法分析任务。 2.能检查并处理某些词法分析错误 词法分析程序能给出的错误信息包括:总的出错个数,每个错误所在的行号,错误的编号及错误信息。 本实验要求处理以下两种错误(编号分别为1,2): 1:非法字符:单词表中不存在的字符处理为非法字符,处理方式是删除该字符,给出错误信息,“某某字符非法”。 2:源程序文件结束而注释未结束。注释格式为:/* …… */ 四、保留字和特殊符号表

正则表达式教程

正则表达式 学习要点: 1.什么是正则表达式 2.创建正则表达式 3.获取控制 4.常用的正则 假设用户需要在HTML 表单中填写姓名、地址、出生日期等。那么在将表单提交到服 务器进一步处理前,JavaScript 程序会检查表单以确认用户确实输入了信息并且这些信息是 符合要求的。 一.什么是正则表达式 正则表达式(regular expression)是一个描述字符模式的对象。ECMAScript 的RegExp 类 表示正则表达式,而String 和RegExp 都定义了使用正则表达式进行强大的模式匹配和文本 检索与替换的函数。 正则表达式主要用来验证客户端的输入数据。用户填写完表单单击按钮之后,表单就会 被发送到服务器,在服务器端通常会用PHP、https://www.360docs.net/doc/8c12319871.html, 等服务器脚本对其进行进一步处理。 因为客户端验证,可以节约大量的服务器端的系统资源,并且提供更

好的用户体验。 二.创建正则表达式 创建正则表达式和创建字符串类似,创建正则表达式提供了两种方法,一种是采用new 运算符,另一个是采用字面量方式。 1.两种创建方式 var box = new RegExp('box'); //第一个参数字符串 var box = new RegExp('box', 'ig'); //第二个参数可选模式修饰符 模式修饰符的可选参数 参数含义 i 忽略大小写 g 全局匹配 m 多行匹配 var box = /box/; //直接用两个反斜杠 var box = /box/ig; //在第二个斜杠后面加上模式修饰符 2.测试正则表达式 RegExp 对象包含两个方法:test()和exec(),功能基本相似,用于测试字符串匹配。test() 方法在字符串中查找是否存在指定的正则表达式并返回布尔值,如果存在则返回true,不存 在则返回false。exec()方法也用于在字符串中查找指定正则表达式,如果exec()方法执行成

中医号脉有诀窍 让你5分钟就能学会

养生揭秘:中医号脉有诀窍让你5分钟就能学会(图) 中医号脉可以说是源远流长,从古代一直被沿用传承至现在,足以可见它的强大生命力和科学性。中医自古便有号脉这一绝学。望,闻,问,切始终以普遍应用的技巧,尤其是切脉,这是一个非常具有神奇性的技巧。中医号脉其实就是医生用手指触按病人的动脉搏动,以探查脉象,从而了解病情的一种诊断方法。 健康人的脉象称为正常脉象。一般是不浮不沉,不大不小,不强不弱,不快不慢,均匀和缓,节律整齐,又称为平脉或缓脉。平脉至数清楚,一息(即一呼一吸)之间四至五次,相当于72~80次,节律、强弱一致。脉象受体内外因素的影响而发生生理的或暂时的变化,也属正常。如年龄越小,脉跳越快,婴儿脉急数,每分钟120~140次;五、六岁儿童常为一息六至,每分钟90~110次;青壮年体强,脉多有力;年老人体弱,脉来较弱;成年人女性较成年男性脉细弱而略快;瘦人脉较浮,胖人脉多沉;重体力劳动,剧烈运动长途步行,饮酒饱餐,情绪激动,脉多快而有力,饥饿时则脉较弱。 1、大小: 管察气:大气旺,小气虚。 2、快慢: 管察精:快精虚,慢精足。 3、硬软: 管察火:硬火多,软火少。 4、浮沉: 管表里:[亦可说阴阳]浮表症,沉里症。 5、匀乱: 管察安危:匀则生命及心脏平安,乱则生命及心脏危险。 常见的异常脉象: 浮脉 是脉动显现部位表浅的一种脉,轻取即得,重按反而变弱。一般情况下,提示病邪在表。脉浮而有力者为表实,浮而无力者为表虚。 沉脉

是脉动显现部位较深的一种脉,轻取不得,重按始见。通常主里证,沉而有力者为里实证,沉而无力者为里虚证。 迟脉 脉来较慢,每分钟60次以下。多主寒证,因寒可使血流速度减慢。迟而有力者为冷积实证,迟而无力者为阳虚证。 数脉 脉来较快,每分钟90次以上,来去急促。多主热证,因热可使血流速度加速,数而有力者为实热 细脉 又称小脉,脉如细线,软弱少力,但应指尚明显。是湿证与虚证之象。因湿邪阻滞脉道或气血虚而不能充盈脉道所致。 洪脉,脉体阔大,充实有力,来盛去衰,状如洪水。大多主邪热亢盛的实证。 弦脉,脉形端直,如按琴弦。常见于有肝胆病、痰饮证、疼痛证的患者。 滑脉,脉来流(滑)利,如盘走珠。是实热证、痰饮证、伤食证,或妊娠的脉象。 涩脉 脉来艰涩不畅,如轻刀刮竹。为气滞证、瘀血证、精血亏少证之征象。 虚脉 三部脉举按皆无力,隐隐蠕动于指下,为一切无力脉之总称。是虚证之象,主要为气虚或气血两虚证。 实脉 三部脉举按皆有力,脉来盛而坚实,为一切有力脉的总称。是实证之象,提示邪气实而正气不虚 号脉方法: 早期的切脉方法比较复杂,要切按头颈、手、足等多处部位的脉动。以后逐渐简化为只切按手腕部的脉搏,称为“寸口”诊法。在这短短寸许长的脉动部位上,古代医家做足了文章。他们将腕横纹向上约一寸长的这段脉动分成了三“寸、关、尺”三部。

编译原理实验词法分析实验报告

编译技术实验报告 实验题目:词法分析 学院:信息学院 专业:计算机科学与技术学号: 姓名:

一、实验目的 (1)理解词法分析的功能; (2)理解词法分析的实现方法; 二、实验内容 PL0的文法如下 …< >?为非终结符。 …::=? 该符号的左部由右部定义,可读作“定义为”。 …|? 表示…或?,为左部可由多个右部定义。 …{ }? 表示花括号内的语法成分可以重复。在不加上下界时可重复0到任意次 数,有上下界时可重复次数的限制。 …[ ]? 表示方括号内的成分为任选项。 …( )? 表示圆括号内的成分优先。 上述符号为“元符号”,文法用上述符号作为文法符号时需要用引号…?括起。 〈程序〉∷=〈分程序〉. 〈分程序〉∷= [〈变量说明部分〉][〈过程说明部分〉]〈语句〉 〈变量说明部分〉∷=V AR〈标识符〉{,〈标识符〉}:INTEGER; 〈无符号整数〉∷=〈数字〉{〈数字〉} 〈标识符〉∷=〈字母〉{〈字母〉|〈数字〉} 〈过程说明部分〉∷=〈过程首部〉〈分程序〉{;〈过程说明部分〉}; 〈过程首部〉∷=PROCEDURE〈标识符〉; 〈语句〉∷=〈赋值语句〉|〈条件语句〉|〈过程调用语句〉|〈读语句〉|〈写语句〉|〈复合语句〉|〈空〉 〈赋值语句〉∷=〈标识符〉∶=〈表达式〉 〈复合语句〉∷=BEGIN〈语句〉{;〈语句〉}END 〈条件〉∷=〈表达式〉〈关系运算符〉〈表达式〉 〈表达式〉∷=〈项〉{〈加法运算符〉〈项〉} 〈项〉∷=〈因子〉{〈乘法运算符〉〈因子〉} 〈因子〉∷=〈标识符〉|〈无符号整数〉|'('〈表达式〉')' 〈加法运算符〉∷=+|- 〈乘法运算符〉∷=* 〈关系运算符〉∷=<>|=|<|<=|>|>= 〈条件语句〉∷=IF〈条件〉THEN〈语句〉 〈字母〉∷=a|b|…|X|Y|Z 〈数字〉∷=0|1|2|…|8|9 实现PL0的词法分析

正则表达式语法完整版

正则表达式基础知识 一个正则表达式就是由普通字符(例如字符a 到z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。如:

下面看几个例子: "^The":表示所有以"The"开始的字符串("There","The cat"等); "of despair$":表示所以以"of despair"结尾的字符串; "^abc$":表示开始和结尾都是"abc"的字符串——呵呵,只有"abc"自己了;"notice":表示任何包含"notice"的字符串。 '*','+'和'?'这三个符号,表示一个或一序列字符重复出现的次数。它们分别表示“没有或更多”,“一次或更多”还有“没有或一次”。下面是几个例子: "ab*":表示一个字符串有一个a后面跟着零个或若干个b。("a", "ab", "abbb",……);"ab+":表示一个字符串有一个a后面跟着至少一个b或者更多; "ab?":表示一个字符串有一个a后面跟着零个或者一个b; "a?b+$":表示在字符串的末尾有零个或一个a跟着一个或几个b。 也可以使用范围,用大括号括起,用以表示重复次数的范围。 "ab{2}":表示一个字符串有一个a跟着2个b("abb"); "ab{2,}":表示一个字符串有一个a跟着至少2个b; "ab{3,5}":表示一个字符串有一个a跟着3到5个b。

请注意,你必须指定范围的下限(如:"{0,2}"而不是"{,2}")。 还有,你可能注意到了,'*','+'和'?'相当于"{0,}","{1,}"和"{0,1}"。 还有一个'|',表示“或”操作: "hi|hello":表示一个字符串里有"hi"或者"hello"; "(b|cd)ef":表示"bef"或"cdef"; "(a|b)*c":表示一串"a""b"混合的字符串后面跟一个"c"; '.'可以替代任何字符: "a.[0-9]":表示一个字符串有一个"a"后面跟着一个任意字符和一个数字; "^.{3}$":表示有任意三个字符的字符串(长度为3个字符); 方括号表示某些字符允许在一个字符串中的某一特定位置出现: "[ab]":表示一个字符串有一个"a"或"b"(相当于"a|b"); "[a-d]":表示一个字符串包含小写的'a'到'd'中的一个(相当于"a|b|c|d"或者"[abcd]");"^[a-zA-Z]":表示一个以字母开头的字符串; "[0-9]%":表示一个百分号前有一位的数字; "[0-9]+":表示一个以上的数字; ",[a-zA-Z0-9]$":表示一个字符串以一个逗号后面跟着一个字母或数字结束。 你也可以在方括号里用'^'表示不希望出现的字符,'^'应在方括号里的第一位。(如:"%[^a-zA-Z]%"表 示两个百分号中不应该出现字母)。 为了逐字表达,必须在"^.$()|*+?{\"这些字符前加上转移字符'\'。 请注意在方括号中,不需要转义字符。

十分钟让你学会号脉

十分钟学号脉 在临床中,基本上来个病人就把手脖伸到诊桌上让中医大夫号脉,但辩脉是很复杂的,脉学共有27种,但作为非专业人员,掌握以下10种现象就足够了,也比较容易理解。 人体的五脏,就是说,左手的寸、关、尺对应人体的心、肝、肾, 右手的寸、关、尺对应人体的肺、脾,命门从这个角度入手比,沉浮滑容易多了。号脉时左手寸脉能摸到代表心脉正常摸不到说明心血不足。大多都有心悸接不上气的现象左手关脉正常为不强不弱太强说明肝气太盛,太弱也不行,大多有胃炎一类的病左手尺脉太弱,头上不是头晕就头痛或头脑不清醒,有时我分不清就说患者头有问题。 右手寸脉太弱为肺虚一般有咳嗽现象太强也不行。

右手关脉太弱为脾弱有便溏腹痛一类太强左手关脉弱 的话胃炎是跑不掉的。 右手尺脉弱大多腰痛身上沉困。 以上是一点心得,希望为大家指点方向,请深资中医,老中医们不要把我批评的体完无肤。 戏说脉诊 告诉你一个秘密,教你轻轻松松学中医,自自在在学脉诊,也许,你从这里起步,开始了你的学习中 医的生涯,成为一名上好的中医大夫。一个好的中医大夫就是一座医院,带着三个手指头可以走遍天下,这 是西医永远也做不到的。闲话少叙,书回正传: 学习脉诊首先从实用脉诊开始,从习以为常入门。实用脉诊分:大小,快慢,硬软,浮沉,匀乱10种。有人要问了,书上有几十种,你的才10种,有否搞错?错不了!这是脉学和实践中总结出来的一点东西,写出来供大家欣赏多了繁琐,少了不够,要明白看下去就知了。 1、脉大小。主管察气。脉大气旺,脉小气虚。(看,多简便呀!)

2、脉快慢。主管察精,脉快精虚,脉慢精足。(现在脉慢的人不多了,只有初中生,军人,运动员了。) 3、脉硬软。主管察火,脉硬火多,脉软火少。(太简便了吧?) 4、脉浮沉。主管表里。(亦可说阴阳)脉浮表症,脉沉里症。(一目了然,简单得不可思义呀!) 5、脉匀乱。主管察安危。脉匀则生命及心脏平安,脉乱则生命及心脏危险。(太直观了!) 例如:肝硬化的脉,是快、小、硬、沉,(两关独居中)。套入脉理,则为精亏,气虚,火多,里即病在内脏,两关微浮一些,为气火位于肝胃,(我又把它戏为黄豆脉,一切癌症艾滋病白血病均为黄豆脉),你叫我看病,不用你出声,我一看脉就能说出你有什么病,好玩吧? 比如感冒的脉:大,浮,硬,快,套入脉理,为气旺,病表(表即躯体感冒属表症)火多,精亏,看到这样的脉,你说你肚疼,那你在说谎,一摸你的脉,你体内隐藏的病,便无处躲藏,现形毕露,好玩吧?只要你到了这种水平,心情就愉快了。 当你学习实用脉诊学好之后,你再继续学习经典,学习李时珍的《李频湖脉诀》,王叔和的《脉诀》,大学教材《中医诊断学》《难经》等,到那时你就是一个诊脉高手,诊病断病如举手之劳,爽吧!

正则表达式

正则表达式定义 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。 列目录时,dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的。 正则表达式是由普通字符(例如字符a 到z)以及特殊字符(称为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。 普通字符 由所有那些未显式指定为元字符的打印和非打印字符组成。这包括所有的大写和小写字母字符,所有数字,所有标点符号以及一些符号。 非打印字符 字符含义 \cx 匹配由x指明的控制字符。例如,\cM 匹配一个Control-M 或回车符。x 的值必须为A-Z 或a-z 之一。否则,将c 视为一个原义的'c' 字符。 \f 匹配一个换页符。等价于\x0c 和\cL。 \n 匹配一个换行符。等价于\x0a 和\cJ。 \r 匹配一个回车符。等价于\x0d 和\cM。 \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。 \S 匹配任何非空白字符。等价于[^ \f\n\r\t\v]。 \t 匹配一个制表符。等价于\x09 和\cI。 \v 匹配一个垂直制表符。等价于\x0b 和\cK。 特殊字符 所谓特殊字符,就是一些有特殊含义的字符,如上面说的"*.txt"中的*,简单的说就是表示任何字符串的意思。 如果要查找文件名中有*的文件,则需要对*进行转义,即在其前加一个\。ls \*.txt。正则表达式有以下特殊字符。 $ 匹配输入字符串的结尾位置。如果设置了RegExp 对象的Multiline 属性,则$ 也匹配'\n' 或'\r'。要匹配$ 字符本身,请使用\$。 ( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用\( 和\)。 * 匹配前面的子表达式零次或多次。要匹配* 字符,请使用\*。 = + 匹配前面的子表达式一次或多次。要匹配+ 字符,请使用\+。 . 匹配除换行符\n之外的任何单字符。要匹配 .,请使用\。 [ 标记一个中括号表达式的开始。要匹配[,请使用\[。 ? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配? 字符,请使用\?。 \ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如,'n' 匹配字符'n'。'\n' 匹配换行符。序列'\\' 匹配"\",而'\(' 则匹配"("。 ^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配^ 字符本身,请使用\^。 { 标记限定符表达式的开始。要匹配{,请使用\{。| 指明两项之间的一个选择。要匹配|,请使用\|。

10分钟教你如何学会号脉

10分钟教你如何学会号脉 脉象的产生与心脏的波动,心气的盛衰,脉道的通利和气血的盈亏直接相关。所以,心、脉是形成脉象的主要脏器。气血是形成脉象的物质基础。下面,我们且看看专家们是如何对此做解释的吧。 同时,血液循行脉道之中,流布全身,运行不息,除心脏的主导作用外,还必须有各脏器的协调配合:肺朝百脉,肺气敷布,血液方能布散;脾统血,为气血生化之源,血液靠脾气的充养和统摄得以运行;肝藏血,主疏泄以调节血量;肾藏精,精能生血,又能化气,肾气为各脏腑组织功能活动的原动力。故能反映全身脏腑、气血、阴阳的综合信息。当脏腑、气血发生病变后,必然从脉搏上表现出来,呈现病理脉象,成为诊断疾病的重要依据。 1、大小: 管察气:大气旺,小气虚。 2、快慢: 管察精:快精虚,慢精足。 3、硬软: 管察火:硬火多,软火少。 4、浮沉: 管表里:[亦可说阴阳]浮表症,沉里症。

5、匀乱: 管察安危:匀则生命及心脏平安,乱则生命及心脏危险。 号脉方法详解: 早期的切脉方法比较复杂,要切按头颈、手、足等多处部位的脉动。以后逐渐简化为只切按手腕部的脉搏,称为“寸口”诊法。在这短短寸许长的脉动部位上,古代医家做足了文章。他们将腕横纹向上约一寸长的这段脉动分成了三“寸、关、尺”三部。 左右手的寸、关、尺部位分属不同的脏腑,认为可以反映相应脏腑的病变。其中右寸反映肺的情况,右关反映脾胃,右尺反映肾(命门);左寸反映心,左关反映肝,左尺反映肾与膀胱。 仔细观察,大家可以发现:远端的寸部对应的是人体最上部的心、肺(上焦,呼吸与循环系统);中间的关部,对应肝、脾胃(中焦,消化系统);近端的尺部对应肾、膀胱(下焦,泌尿生殖系统)。如此,小小的“寸口”,却俨然成为人体五脏六腑的全息窗口。 仅此还不够,在切脉的时候,还要用三种不同的指力去按压脉搏,轻轻用力按在皮肤上为“浮取”;中等度用力按至肌肉为“中取”;重用力按至筋骨为“沉取”。寸、关、尺三部,每一部有浮、中、沉三候,合称为“三部九候”。不同手法取到的脉,临床意义不同。通常,脉浮于外者,病位浅,沉于里者病位深。

编译原理词法分析实验报告

词法分析器实验报告 一、实验目的 选择一种编程语言实现简单的词法分析程序,设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。 二、实验要求 待分析的简单的词法 (1)关键字: begin if then while do end 所有的关键字都是小写。 (2)运算符和界符 : = + - * / < <= <> > >= = ; ( ) # (3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义: ID = letter (letter | digit)* NUM = digit digit* (4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。 各种单词符号对应的种别码: 表各种单词符号对应的种别码 词法分析程序的功能: 输入:所给文法的源程序字符串。 输出:二元组(syn,token或sum)构成的序列。 其中:syn为单词种别码; token为存放的单词自身字符串; sum为整型常数。 例如:对源程序begin x:=9: if x>9 then x:=2*x+1/3; end #的源文件,经过词法分析后输出如下序列: (1,begin)(10,x)(18,:=)(11,9)(26,;)(2,if)…… 三、词法分析程序的算法思想: 算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根

据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。 主程序示意图: 主程序示意图如图3-1所示。其中初始包括以下两个方面: ⑴关键字表的初值。 关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下: Char *rwtab[6] = {“begin”, “if”, “then”, “while”, “do”, “end”,}; 图3-1 (2)程序中需要用到的主要变量为syn,token和sum 扫描子程序的算法思想: 首先设置3个变量:①token用来存放构成单词符号的字符串;②sum用来整型单词;③syn 用来存放单词符号的种别码。扫描子程序主要部分流程如图3-2所示。

中医把脉口诀表

中医把脉口诀表 分类:字号:大中小订阅 气口九道脉(中医理论) 手检图曰:肺为五脏华盖,上以应天,解理万物,主行精气,法五行,应四时,知五味。气口之中,阴阳交会,中有五部,前后左右,各有所主,上下中央,分为九道,诊之则知病邪所在也。 李濒湖曰:气口一脉,分为九道,总统十二经,并奇经八脉,各出诊法,乃歧伯秘授黄帝之诀也。扁鹊推之,独取寸口以决死生。盖气口为百脉流注,朝会之始,故也。三部虽传,而九道沦隐,故奇经之脉,世无人知,今撰为图,并附其说于后,于后,以泻千古之秘藏云。 附图: 歧伯曰:前部如外者,足太阳膀胱也。动苦目眩头项腰背强痛,男子阴下湿痒,女子少腹痛引命门,阴中痛子脏闭,月水不利。浮为风,涩为寒,滑为劳热,紧为宿食。 中部如外者,足阳明胃也。动苦头痛面赤。滑,为饮;浮,为大便不利;涩,为嗜卧肠鸣不能食。足胫痹。后

部如外者,足少阳胆也。动苦腰背胻股肢节筋痛,浮为气。涩为风,急为转筋为劳。 前部如内者,足厥阴肝也。动苦少腹痛引腰,大便不利,男子茎中痛,小便难,疝气,两丸上入,女子月水不利,阴中寒,子户闭,少腹急。 中部如内者,足太阴脾也。动苦腹满胃中痛,上管有寒食不下,腰上状如居水中。沉涩,为身重足胫寒痛,烦满不能卧,时咳唾有血,泄利食不化。 后部如内者,足少阴肾也。动苦少腹痛,与心相引背痛,小便淋,女人月水来上抢心胸,胁满,股里拘急。 前部中央直者,手少阴心、手太阳小肠也。动苦心下坚痛,腹胁急。实急者为感忤,虚者为下利肠鸣。女子阴中痒痛,滑为有娠。 中部中央直中者,手厥阴心主也。动苦心痛,面赤多喜怒,食苦咽。微浮苦悲伤恍惚,涩为心下寒,沉为恐怖,如人将捕之状,时寒热,有血气。 后部中央直者,手太阳肺、手阳明大肠也。动苦咳逆,气不得息。浮为风,沉为热,紧为胸中积热,涩为时咳血。

编译原理词法分析和语法分析报告+代码(C语言版)

信息工程学院实验报告(2010 ~2011 学年度第一学期) 姓名:柳冠天 学号:2081908318 班级:083

词法分析 一、实验目的 设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。 二、实验要求 2.1 待分析的简单的词法 (1)关键字: begin if then while do end 所有的关键字都是小写。 (2)运算符和界符 := + - * / < <= <> > >= = ; ( ) # (3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义: ID = letter (letter | digit)* NUM = digit digit* (4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。 2.2 各种单词符号对应的种别码: 表2.1 各种单词符号对应的种别码 2.3 词法分析程序的功能: 输入:所给文法的源程序字符串。 输出:二元组(syn,token或sum)构成的序列。 其中:syn为单词种别码; token为存放的单词自身字符串; sum为整型常数。 例如:对源程序begin x:=9: if x>9 then x:=2*x+1/3; end #的源文件,经过词法分析后输出如下序列: (1,begin)(10,x)(18,:=)(11,9)(26,;)(2,if)…… 三、词法分析程序的算法思想: 算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。 3.1 主程序示意图:

中医脉象口诀歌_学会你也能号脉

脉理兮,用心细,三法四中要熟记。人脉难,需勤理,察形辨象非容易,浮沉迟数力为中,扩充各脉真消息,此理需明未诊前,免之新医,吃脉记,经为一贯用心机,指下 回声诊妙记。 浮脉:轻寻有、按无有,浮脉漂然肉上

游,水帆木浮未定向,浮脉中间仔细究,有力恶风见表实,无神无力指虚浮,浮脉里有七瓣(浮紧、浮缓、浮滑、浮数、、浮迟、浮虚、浮洪),其中理性要经验。 洪脉:洪脉满指波涛似,来时力状去自然。脉洪阳盛虽夏旺,非是火盛治灾凡。实脉:实毕毕更属长,举按充实力最强,新病逢时是火盛,久病逢时或气痛。 长脉:长脉直过本位前,迢迢自弱类长杆,心肾身强气本状,实脉相联似剑长。 短脉:短脉象形似龟,藏头露尾脉中筋,寸尺可凭关不诊,涩微动结似相随,主病逢之为难治,概似真元气多亏。 芤脉:两边实中间空,芤形脉似软如葱,

寸阳见芤血上溢,芤现迟脉下流红,芤形浮细须轻诊,睡眠浮脉像得诊,气血伤耗精神损,自汗阳虚骨蒸深。 散脉:散脉形浮无沉候,如寻至数拘不定,满指散乱似扬先,按之分散难归整,产是生早胎为堕,久病脉散必丧命。 沉脉:沉脉壮重迎指,如石投水往下沉,按之无力真元弱,有力为痛滞气侵,中寒其脉均沉类,沉紧、沉滑、沉弦、沉细、沉数、沉迟、沉微,数头机关勿误人。

微脉:细微小至如弦,沉而极细最不断,春夏少年均不宜,春冬老弱确为善。 伏脉:沉之深,伏脉游,下指推筋靠骨求,真气不行症痞结,脉丧泻之不出头。 弱脉:沉细软绵似弱脉,轻寻无板重采知,元气耗损精血虚,少年可虑白头矣。 虚脉:虚脉举指迟大软,按之无力又空洞,精神气血都伤损,病因虚法,汗多中。 牢脉:沉而伏力很强,牢形实大和弦长,劳伤微疾真精损,气喘腹疝,七情伤。

编译原理实验(词法分析)

编译原理实验报告 实验一 实验题目:词法分析 指导老师:任姚鹏 专业班级:计算机科学与技术系网络工程方向1002班姓名:xxxx

2013年 4月13日 实验类型__验证性__ 实验室_软件实验室三__ 一、实验项目的目的和任务: 了解和掌握词法分析的方法,编程实现给定源语言程序的词法分析器,并利用该分析器扫描源语言程序的字符串,按照给定的词法规则,识别出单词符号作为输出,发现其中的词法错误。 二、实验内容: 1.设计一个简单的程序设计语言(语言中有若干运算符和分界符;有若干关健字;若干标识符及若干常数) 2.确定编译中使用的表格、词法分析器的输出形式、标识符与关键字的区分方法。 3.把词法分析器设计成一个独立的过程。 三、实验要求: 1.从键盘上输入源程序; 2.处理各单词,计算个单词的值和类型; 3.输出个单词名、单词的值和类型。 四、实验代码 #include #include char file[1024]; int length=0; int index; char keywords[][10]={"auto","short","int","long","float", "double","char","struct","union","enum", "typedef","const","unsigned","signed","extern", "register","static","volatile","void","default", "if","else","switch","case","for", "do","while","goto","continue","break", "sizeof","return"}; char limits[]={'(',')','[',']','{','}',',',';'}; char operators[]={'+', '-', '*', '/', '%', '>','<','&','|','^', '~','!','='}; //13 int IsChar(char ch) //是否是字符 { if ( (ch>='a'&&ch<='z') || (ch>='A'&&ch<='Z')) return 1; return 0;}

正则表达式

要想真正的用好正则表达式,正确的理解元字符是最重要的事情。下表列出了所有的元字符和对它们的一个简短的描述。 字符描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“\n”匹配字符“n”。“\\n”匹配一个换行符。序列“\\”匹配“\”而“\(”则匹配“(”。 ^ 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。 $ 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。 * 匹配前面的子表达式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等价于{0,}。 + 匹配前面的子表达式一次或多次。例如,“z o+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。 ? 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“does”或“does”中的“d o”。?等价于{0,1}。 {n} n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。 {n,} n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“fo o o ood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。 {n,m} m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。 ? 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o?”将匹配单个“o”,而“o+”将匹配所有“o”。 点匹配除“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像“[\s\S]”的模式。

《教研员工作总结》

《教研员工作总结》 身为一个教研员,听课、评课可谓是自己工作的重要组成部分。下面是教研员的工作总结,欢迎参考。 教研员工作总结(1)xx年8月,踏着县教育局教研室教研员招聘的东风,我走上了梦寐以求的教研岗位,开始我教育人生的崭新旅程。在过去的几个月里,我用心配合刘主任认真搞好全县小学语文教学研究和指导工作,取得了令人瞩目的成绩。具体总结如下: 一、投身教学过程管理,踏实进行教学指导 透过视导,我发现我县当前小学语文教学有三个迫切需要解决的问题:一是全体学生写字水平不尽人意;二是课外阅读名存实亡比较严重;三是习作教学没有得到应有重视。在与各校领导进行交流的过程中,我针对问题的症结所在,提出了下一步语文教学的具体要求。首先,为了提升全县小学生的写字潜力,我要求各校一方面要切实用好每一天十五分钟的写字课,另一方面要充分利用语文课堂指导学生写字。 为此,我提出了小学语文课堂“30+10”模式,即无论是高年级还是中低年级的语文课堂都要拿出十分钟的时光让学生练习写字或是练习写作,从而提升语文课堂教学质量。其次,我透过交流让全体教干教师明确课外阅读不仅仅仅是课外就应做的事,它是我们务必完成的教学任务,并号召各学校要高度重视学生的课外阅读,加强课外阅读的指导力度,创新学生课外阅读的方式方法,努力激发学生的课外阅读兴趣,着力打造“人人爱读书,人人有书读”的书香校园。再

次,针对学生习作出现的问题,我要求各校要不断改变学生学业水平的评价方式,坚决杜绝学生作文以书写定质量的误区,要务实评价学生言语表达潜力,努力把教师的注意力引领到关注习作的内涵上来。 同时,我还提出了学生习作评改三部曲,及自评自改、互评互改、教师评改,用心拓宽习作评价的途径,把老师的主要精力从作文批改中解放出来,让教师有更多的时光研究教材、研究教法、创新习作资料,从而全面提高学生语言表达潜力。 二、密切关注教研课题,指导教师深入开展研究 12月份,根据县教研室的统一要求,我们小学组几位教研员分别对县第八期小学教学研究课题进行了结题工作,其中我参与了68项小学语文课题结题论证工作,在活动中,透过听汇报、提问答辩、互动交流、专项指导,我努力让每个课题组成员明确课题研究的严肃性,而且为老师下一步开展课题研究指引了方向,明确了道路。 在课题结题过程中,我发现我县教学研究课题存在诸多问题,比如结题报告撰写不规范、研究成果主题不集中、结题材料杂乱无章等等。针对这一状况,每到一校,我一边对课题进行鉴定,一边认真做好课题研究辅导讲座,帮忙广大教师明确结题报告一般包括九个部分:课题研究背景、研究目标、理论依据、研究资料、研究方法、研究对象、研究步骤、研究成果及分析、研究结论与思考,其中“研究成果与分析”是结题报告的主干部分,就应作为重点来写,决不能将其变成发表或获奖论文的叠加;让广大教师明晰结题材料一般包括主件和附件两个部分,主件指结题报告、结题论证书、研究成果,附件

编译原理词法分析程序实现实验报告

编译原理词法分析程序实现实验报告实验一词法分析程序实现 一、实验内容 选取无符号数的算术四则运算中的各类单词为识别对象,要求将其中的各个单词识别出来。输入:由无符号数和+,,,*,/, ( , ) 构成的算术表达式,如 1.5E+2,100。输出:对识别出的每一单词均单行输出其类别码(无符号数的值暂不要求计算)。二、设计部分 因为需要选取无符号数的算术四则运算中的各类单词为识别对象,要求将其中的各个单词识别出来,而其中的关键则为无符号数的识别,它不仅包括了一般情况下的整数和小数,还有以E为底数的指数运算,其中关于词法分析的无符号数的识别过程流程图如下: 输入字符p指向第一个字符 符号识别*p=+||-||*||/ YYNN*p=0~9*p=E*p=0~9||"." N无效符号Y *p=“.”GOTO 2 GOTO 1 GOTO 1: NY无符号数GOTO 1*p=0~9*p='/0' YN P++NNP++*p=E*p='+'||'-' YY P++P++continue

YY *p=0~9*p=0~9 NN 无符号数无符号数 P++P++ continuecontinue GOTO 2: GOTO 2 *p=Econtinue Y 无符号数 P++ continue 三、源程序代码部分 #include #include #include #define MAX 100 #define UNSIGNEDNUMBER 1 #define PLUS 2 #define SUBTRACT 3 #define MULTIPLY 4 #define DIVIDE 5 #define LEFTBRACKET 6 #define RIGHTBRACKET 7 #define INEFFICACIOUSLABEL 8 #define FINISH 111

很完整的一篇正则表达式总结

1、正则表达式-完结篇---工具类开发--- ? 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 '/.+/', 'email'=> '/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/', 'url'=> '/^http(s?):\/\/(?:[A-za-z0-9-]+\.)+[A-za-z]{2,4}(?:[\/ \?#][\/=\?%\-&~`@[\]\':+!\.#\w]*)?$/', 'currency'=> '/^\d+(\.\d+)?$/', 'number'=> '/^\d+$/', 'zip'=> '/^\d{6}$/', 'integer'=> '/^[-\+]?\d+$/', 'double'=> '/^[-\+]?\d+(\.\d+)?$/',

5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2'english'=> '/^[A-Za-z]+$/', 'qq'=> '/^\d{5,11}$/', 'mobile'=> '/^1(3|4|5|7|8)\d{9}$/', ); //定义其他属性 private$returnMatchResult=false; //返回类型判断 private$fixMode=null; //修正模式 private$matches=array(); //存放匹配结果 private$isMatch=false; //构造函数,实例化后传入默认的两个参数 public function __construct($returnMatchResult=false,$fixMode=null){ $this->returnMatchResult=$returnMatchResult; $this->fixMode=$fixMode; } //判断返回结果类型,为匹配结果matches还是匹配成功与否isMatch,并调用返回方法 private function regex($pattern,$subject){ if(array_key_exists(strtolower($pattern), $this->validate)) $pattern=$this->validate[$pattern].$this->fixMode; //判断后再连接上修正模式作为匹配的正则表达式 $this->returnMatchResult ?

相关文档
最新文档