Java Regular Expression Tester
----------------- Regex.java ------------------- import java.util.regex.*; import javafx.application.*; import javafx.stage.*; import javafx.scene.*; import javafx.scene.control.*; import javafx.scene.layout.*; import javafx.scene.paint.*; import javafx.scene.web.*; import javafx.geometry.*; public class Regex extends Application { TextField textField; TextArea textArea; WebEngine webEngine; Pattern pattern; StringBuilder sb = new StringBuilder(); @Override public void start(Stage stage) { textField = new TextField(); textArea = new TextArea(); textField.textProperty().addListener((v, o, n) -> update(true)); textArea.textProperty().addListener((v, o, n) -> update(false)); WebView webView = new WebView(); webEngine = webView.getEngine(); webEngine.loadContent("<html><head><style>.m{background-color:#F0EEA0;color:red;}</style></head><body></body></html>"); //webView.setZoom(.77); StackPane stackPane = new StackPane(webView); stackPane.setBackground(new Background(new BackgroundFill(Color.WHITE, CornerRadii.EMPTY, Insets.EMPTY))); stackPane.setBorder(new Border(new BorderStroke(Color.web("CECECE"), BorderStrokeStyle.SOLID, new CornerRadii(2), BorderWidths.DEFAULT))); Label label1 = new Label("Regex:"), label2 = new Label("Text:"), label3 = new Label("Result:"); Insets insets = new Insets(2,0,2,9); label1.setPadding(insets); label2.setPadding(insets); label3.setPadding(insets); SplitPane splitPane = new SplitPane(new VBox(label2, textArea), new VBox(label3, stackPane)); splitPane.setOrientation(Orientation.VERTICAL); VBox vBox = new VBox(new VBox(label1, textField), splitPane); VBox.setVgrow(textArea, Priority.ALWAYS); stage.setScene(new Scene(vBox, 300, 300)); stage.show(); Platform.runLater(() -> { textField.setText("[0-9a-z]*"); textArea.setText("0123456789\n!\"#$%&\'()*+,-./:;<=>?@[\\]^_{|}\nABCDEFGHIJKLMNOPQRSTUVWXYZ\nabcdefghijklmnopqrstuvwxyz"); }); } void update(boolean b) { if (b) { pattern = null; try { pattern = Pattern.compile(textField.getText()); } catch (Exception e) { } } sb.setLength(0); if (pattern == null) { sb.append("<span style=\"color:Red\">Pattern Error</span>"); } else { String str = textArea.getText(); Matcher matcher = pattern.matcher(str); int pos = 0; while (matcher.find()) { app(str.substring(pos, matcher.start())); sb.append("<span class=\"m\">"); app(matcher.group()); sb.append("</span>"); pos = matcher.end(); } if (pos > 0) app(str.substring(pos)); } webEngine.executeScript("document.body.innerHTML='" + sb.toString() + "'"); } void app(String s) { for(int i = 0, len = s.length(); i < len; i++) { char ch = s.charAt(i); switch (ch) { case ' ' : sb.append(" "); break; case '&' : sb.append("&"); break; case '<' : sb.append("<"); break; case '>' : sb.append(">"); break; //case '\"': sb.append("""); break; case '\'': sb.append("'"); break; case '\\': sb.append("\"); break; case '\n': sb.append("<br>"); break; default : sb.append(ch); } } } }