------Java培训期待与您交流! -------


正则表达式

一、概述

1.简介:含有一些具有特殊意义的字符组成的字符串

2.作用:判断句子中,某一字符串是否符合某一格式

3.优势:简化对某一特定格式的操作

4.缺点:对代码的阅读性较差

二、元字符

具有特殊含义的字符 

元字符正则表达式中的写法含义

."."代表任意一个字符

\d"\\d"代表0~9任何一个数字

\D"\\D"代表任何一个非数字字符

\s"\\s"代表空白字符,如‘\t’‘\n’

\s"\\S"代表非空白字符

\w"\\w"代表可用作标识符的字符,但不包含‘$’

\w"\\W"代表不可用于标识符的字符

\p{Lower}"\\p{Lower}"代表小写字母{a~z}

\p{Upper}"\\p{Upper}"代表大写字母{A~Z}

\p{ASCII}"\\p{ASCII}"ASCII字符

\p{Alpha}"\\p{Alpha}"字母字符

\p{Digit}"\\p{Digit}"十进制字数字,即[0~9]

\p{Alnum}"\\p{Alnum}"数字或字母字符

\p{Punct}"\\p{Punct}"标点符号:!"#$%&'()*+-/:;<=>@[\]^_{}|~

\p{Greph}"\\p{Greph}"可见字符:[\p{Alnum}\p{Punct}]

\p{Print}"\\p{Print}"可打印字符:[\p{Graph}\x20]

\p{Blank}"\\p{Blank}"空格或制表符:[\t]

\p{Cntrl}"\\p{Cntrl}"控制字符


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

限定修饰符

限定修饰符意义示例

0次或1次A

*0次或多次A*

+一次或多次A+

{n}正好出现n次A{2}

{n,}至少出现n次A{3,}

{n,m}出现n到m次之间A{2,5}

#---------------------------------------------------

三、利用正则表达式编写的工具 

去除txt记事本中匹配字串符的窗口程序 

关键代码如下: 

源文件及目标文件路径的选取 

textField_1.setColumns(10);
	JButton button_1 = new JButton("\u9009\u62E9\u8DEF\u5F84");
	button_1.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			JFileChooser chooser= new JFileChooser();
			FileNameExtensionFilter filer = new FileNameExtensionFilter(".txt","txt");
			chooser.setFileFilter(filer);
			chooser.setMultiSelectionEnabled(false);
			int result = chooser.showSaveDialog(getContentPane());
			if (result == JFileChooser.APPROVE_OPTION) {
				objectFile = chooser.getSelectedFile();
				if (!objectFile.getName().endsWith(".txt")) {
					if (!objectFile.exists()) {
						File temFile = new File(objectFile.getParent(),objectFile.getName()+".txt");
							objectFile = temFile;
						 }
					else {
						JOptionPane.showMessageDialog(getContentPane(), "请选择文本文件或输入名称","",JOptionPane.WARNING_MESSAGE);
							return;
					      }
					 }
					 textField_1.setText(objectFile.getAbsolutePath());
				}
			}
		});


#---------------------------------

文件类型的判断以及正则表达式的匹配判断

JButton button_2 = new JButton("\u8F6C\u6362");
		button_2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String tem = textField_2.getText();
				if (sourceFile == null) {
					Toolkit.getDefaultToolkit().beep();
					JOptionPane.showMessageDialog(getContentPane(), "请选择源文件","",JOptionPane.WARNING_MESSAGE);
					return;
				}
				if (objectFile == null) {
					Toolkit.getDefaultToolkit().beep();
					JOptionPane.showMessageDialog(getContentPane(), "请选择目标文件","",JOptionPane.WARNING_MESSAGE);
					return;
				}
				if (tem.equals("") ) {
					Toolkit.getDefaultToolkit().beep();
					JOptionPane.showMessageDialog(getContentPane(), "请输入正则表达式","",JOptionPane.WARNING_MESSAGE);
					return;
				}
				if (!objectFile.exists()) {
					try {
						objectFile.createNewFile();
					} catch (IOException e1) {
						// TODO 自动生成的 catch 块
						e1.printStackTrace();
					}
				}
				FileWriter writer=null;
				System.out.println(tem);
				try {
					 	writer = new FileWriter(objectFile);
					 	scanner = new Scanner(sourceFile);
						while(scanner.hasNextLine()) {
							StringBuilder str = new StringBuilder(scanner.nextLine());
							scan = new Scanner(str.toString());
							String num = scan.findInLine(tem.trim());
							while (num != null) {
									str.delete(str.indexOf(num), str.indexOf(num)+num.length());
									num = scan.findInLine(tem.trim());
							}
							str.append("\r\n");
							writer.write(str.toString());
						}
						writer.flush();
				} catch (FileNotFoundException e2) {
					// TODO 自动生成的 catch 块
					e2.printStackTrace();
				} catch (IOException e3) {
					// TODO 自动生成的 catch 块
					e3.printStackTrace();
				} finally {
					try {
						writer.close();
						} catch (IOException e4) {
							// TODO 自动生成的 catch 块
							e4.printStackTrace();
						}
					scanner.close();
					scan.close();
				}
			}			
		});