import javax.swing.*;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.BadLocationException;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.HeadlessException;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
/**
* 测试 Java 正则表达式
*/
public class RegTester {
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
new RegTesterFrame().setVisible(true);
}
}
class RegTesterFrame extends JFrame {
private JTextField textbox = new JTextField(); // 包含测试文本的文本域
private JTextArea textarea = new JTextArea(); // 包含正则表达式的文本框
private RegTesterFrame thisFrame = this;
private DefaultHighlighter.DefaultHighlightPainter highlightPainter =
new DefaultHighlighter.DefaultHighlightPainter(Color.green);
// 构造方法
RegTesterFrame() throws HeadlessException {
super("测试 Java 正则表达式");
setSize(500, 300);
setLocation(300, 100);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setupComponents();
}
// 初始化控件
private void setupComponents() {
setupBorder();
JPanel topPanel = new JPanel(new BorderLayout(5, 0));
this.add(topPanel, BorderLayout.NORTH);
setupTopPanel(topPanel);
JPanel centerPanel = new JPanel(new BorderLayout());
this.add(centerPanel, BorderLayout.CENTER);
setupCenterPanel(centerPanel);
}
// 给窗体面板加上边框
private void setupBorder() {
JPanel panel = new JPanel(new BorderLayout(5, 5));
panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
this.setContentPane(panel);
}
// 文本域面板
private void setupCenterPanel(JPanel panel) {
textarea.setFont(new Font(Font.DIALOG_INPUT, 0, 12));
panel.add(new JScrollPane(textarea));
}
// 上方面板
private void setupTopPanel(JPanel panel) {
textbox.setFont(new Font(Font.DIALOG_INPUT, 0, 12));
panel.add(textbox, BorderLayout.CENTER);
JButton button = new JButton("测试");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
checkRegularExpression();
}
});
panel.add(button, BorderLayout.EAST);
panel.add(new JLabel("正则表达式:"), BorderLayout.WEST);
}
// 检查正则表达式
private void checkRegularExpression() {
textarea.getHighlighter().removeAllHighlights();
String reg = textbox.getText();
String text = textarea.getText();
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(text);
if (m.find()) {
thisFrame.setTitle("文本符合表达式。");
highlightMatches(m);
} else {
thisFrame.setTitle("文本不符合表达式。");
}
}
// 将符合正则表达式的部分高亮显示
private void highlightMatches(Matcher m) {
highlight(m);
int start = m.end();
while (m.find(start)) {
highlight(m);
start = m.end();
}
}
private void highlight(Matcher m) {
try {
textarea.getHighlighter().addHighlight(m.start(), m.end(), highlightPainter);
} catch (BadLocationException e) {
e.printStackTrace();
}
}
}
JAVA 正则表达式匹配器
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 通过while可以将所有符合的字符串逐条打印,可以放在一个List中待后边使用。注意: 如果只需匹配字符串中的局部...
- 最简单的匹配模式就是,直接输入你想匹配的东西。 比如我想匹配 a,在模式里就可以输入一个 a 。要匹配大写的 A ...
- 友盟的分享,每次都单独配置,有点麻烦,整了个库 Android的分享功能友盟用的蛮多的,一般情况下自带的分享面板就...