1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * See LICENSE.txt included in this distribution for the specific 9 * language governing permissions and limitations under the License. 10 * 11 * When distributing Covered Code, include this CDDL HEADER in each 12 * file and include the License file at LICENSE.txt. 13 * If applicable, add the following below this CDDL HEADER, with the 14 * fields enclosed by brackets "[]" replaced with your own identifying 15 * information: Portions Copyright [yyyy] [name of copyright owner] 16 * 17 * CDDL HEADER END 18 */ 19 20 /* 21 * Copyright (c) 2017, Chris Fraire <cfraire@me.com>. 22 */ 23 package org.opengrok.indexer.util; 24 25 /** 26 * Represents a container for regex-related utility methods. 27 */ 28 public class RegexUtils { 29 30 /** Private to enforce singleton. */ RegexUtils()31 private RegexUtils() { 32 } 33 34 /** 35 * Gets a zero-width expression intended to follow a character match that 36 * asserts that the character either does not follow a backslash escape or 37 * follows an even number¹ of backslash escapes. 38 * <p> 39 * ¹"even number" is limited to 2,4,6 because Java look-behind is not 40 * variable length but instead must have a definite upper bound in the 41 * regex definition. 42 * @return a defined expression: 43 * <pre> 44 * {@code 45 * ((?<=^.)|(?<=[^\\].)|(?<=^(\\\\){1,3}.)|(?<=[^\\](\\\\){1,3}.)) 46 * } 47 * </pre> 48 * (Edit above and paste below [in NetBeans] for easy String escaping.) 49 */ getNotFollowingEscapePattern()50 public static String getNotFollowingEscapePattern() { 51 return "((?<=^.)|(?<=[^\\\\].)|(?<=^(\\\\\\\\){1,3}.)|(?<=[^\\\\](\\\\\\\\){1,3}.))"; 52 } 53 } 54