正则表达式(十八)——向前引用

本文通过一个具体的Java代码示例,演示了如何使用正则表达式中的向前引用功能来匹配特定的字符串模式。重点讲解了Pattern和Matcher类的使用,以及如何通过1等引用符来实现模式的重复匹配。
package com.wy.regular;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegularTest {

	public static void main(String[] args) {
		/*
		 * back refenrences 向前引用
		 * \\1 指的是第二个组的结果和第一个组的需要一样
		 * (\\d(\\d))\\2的结果是false
		 */
		Pattern pattern = Pattern.compile("(\\d(\\d))\\2");
		String str = "1212";
		Matcher matcher = pattern.matcher(str);
		pri(matcher.matches());//true
	}

	private static void pri(boolean str) {
		System.out.println(str);
	}
}

 

实验3 TINY扩充语言的语法树生成 一、实验内容: (一)为Tiny语言扩充的语法有 1.实现改写书写格式的新if语句; 2.扩充算术表达式的运算符号:++(置自增1)、 --(置自减1)运算符号(类似于C语言的++和--运算符号,但不需要完成后置的自增1和自减1)、求余%、乘方^; 3.扩充扩充比较运算符号:<=(小于等于)、>(大于)、>=(大于等于)、<>(不等于)等运算符号; 4增加正则表达式,其支持的运算符号有: 或(|) 、连接(&)、闭包(#)、括号( ) 、可选运算符号(?)和基本正则表达式。 5.for语句的语法规则(类似于C语言的for语言格式): 书写格式:for(循环变量赋初值;条件;循环变量自增或自减1) 语句序列 6.while语句的语法规则(类似于C语言的while语言格式): 书写格式:while(条件) 语句序列 endwhile (二)对应的语法规则分别为: 1. 把TINY语言原有的if语句书写格式 if_stmt-->if exp then stmt-sequence end | | if exp then stmt-sequence else stmt-sequence end 改写为: if_stmt-->if(exp) stmt-sequence else stmt-sequence | if(exp) stmt-sequence 2. ++(置自增1)、 --(置自减1)运算符号、求余%、乘方^等运算符号的文法规则请自行组织。 3.<=(小于等于)、>(大于)、>=(大于等于)、<>(不等于)等运算符号的文法规则请自行组织。 4.为tiny语言增加一种新的表达式——正则表达式,其支持的运算符号有: 或(|) 、连接(&)、闭包(#)、括号( ) 、可选运算符号(?)和基本正则表达式,对应的文法规则请自行组织。 5.为tiny语言增加一种新的语句,ID::=正则表达式 (同时增加正则表达式的赋值运算符号::=) 6.为tiny语言增加一个符合上述for循环的书写格式的文法规则, 7.为tiny语言增加一个符合上述while循环的书写格式的文法规则, 8.为了实现以上的扩充或改写功能,还需要注意对原tiny语言的文法规则做一些相应的改造处理。 (三)Tiny语言文法规则 TINY 语言的BNF语法规则如下: program-->stmt-sequence stmt-sequence--> stmt-sequence ;statement |statement statement--> if-stmt |repeat-stmt |assign-stmt | read-stmt|write-stmt if-stmt-->if exp then stmt-sequence end | if exp then stmt-sequence else stmt-sequence end repeat-stmt-->repeat stmt-sequence until exp assign-stmt-->identifier := exp read-stmt-->read identifier write-stmt-->write exp exp-->simple-exp comparison-op simple-exp |simple-exp comparison-op--> < | = simple-exp-->simple-exp addop term | term addop--> + |- term-->term mulop factor | factor mulop--> * | / factor-->(exp) | number | identifier 二、实验要求: (1)要提供一个源程序编辑的界面,以让用户输入源程序(可输入,可保存、可打开源程序) (2)可由用户选择是否生成语法树,并可查看所生成的语法树。 (3)实验3的实现只能选用的程序设计语言为:C++ (4)要求应用程序的操作界面应为窗口式图形界面。 三、完成时间:3-4周 四、完成方式:每个学生自行独立完成。 五、测试数据(语法正确和错误的源程序均要有测试文件) 测试文件1:(该程序中的if语句还是采用原Tiny语言中if语句的书写格式进行书写,作为实验3的测试源程序,你需要根据实验3实际要求的改写方式进行改写) { Sample program in TINY language - computes factorial } read x; { input
05-11
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值