Buggy code:
public class Main implements ActionListener { String saveDirectory = "" ; String defaultDirectory = null ; final int STARTUP_DELAY = 7 ; boolean SkipLogEnabled = false ; private static Logger logger = Logger . getLogger ( Main . class . getName ( ) ) ; private PropertyChangeSupport change = new PropertyChangeSupport ( this ) ; private FileWriter fileWriter ; private Filter filter ; private ImageLoader imageLoader ; private Aid aid ; private Filterlist filterlist ; private BlockList blockList ; private WorkQueue pageQueue ; private BlockListDataModel blockListModel ; private ThumbnailLoader thumbLoader ; private ConnectionPoolaid connPool ; private BoardListDataModel boards = new BoardListDataModel ( ) ; Properties appSettings = new DefaultAppSettings ( ) ; Properties loggerSettings = new DefaultLoggerSettings ( ) ; Properties sqlProps = new DefaultMySQLconnection ( ) ; private final String PWD = System . getProperty ( "user.dir" ) ; private final String LOGGER_CFG_FILENAME = "logging.ini" ; private final String MYSQL_CFG_FILENAME = "mysql.ini" ; private final String APP_CFG_FILENAME = "config.ini" ; private final String FILTER_DATA_FILENAME = "filter.dat" ; private final String DEFAULT_PAGE_THREADS = "1" ; private final String DEFAULT_IMAGE_THREADS = "1" ; private final String DEFAULT_WRITE_BLOCKED = "false" ; private final String DEFAULT_BASE_URL = "http:////boards.4chan.org//" ; private final String DEFAULT_SUB_PAGES = "a;15,w;15,wg;15" ; public static void main ( String [ ] args ) { } private final void build ( ) { } private void init ( ) { } public Properties loadLoggerConfig ( String filepath ) { } public Properties loadMySqlConfig ( String filepath ) { } public Properties loadAppConfig ( String filepath ) { } private String invalidPropertyMessage ( String property , String filename , String defaultValue ) { } public void actionPerformed ( ActionEvent e ) { } public Properties validateAppSettings ( Properties appSetting ) { String errorMsg ; String page = appSetting . getProperty ( "page_threads" , DEFAULT_PAGE_THREADS ) ; errorMsg = invalidPropertyMessage ( "page_threads" , APP_CFG_FILENAME , DEFAULT_PAGE_THREADS ) ; try { if ( ( Integer . parseInt ( page ) ) < 1 ) { Main . logger . warning ( errorMsg ) ; appSetting . setProperty ( "page_threads" , DEFAULT_PAGE_THREADS ) ; } } catch ( NumberFormatException nfe ) { Main . logger . warning ( errorMsg ) ; appSetting . setProperty ( "page_threads" , DEFAULT_PAGE_THREADS ) ; } String image = appSettings . getProperty ( "image_threads" , DEFAULT_IMAGE_THREADS ) ; errorMsg = invalidPropertyMessage ( "image_threads" , APP_CFG_FILENAME , DEFAULT_IMAGE_THREADS ) ; try { if ( ( Integer . parseInt ( image ) ) < 1 ) { Main . logger . warning ( errorMsg ) ; appSetting . setProperty ( "image_threads" , DEFAULT_IMAGE_THREADS ) ; } } catch ( NumberFormatException nfe ) { Main . logger . warning ( errorMsg ) ; appSetting . setProperty ( "image_threads" , DEFAULT_IMAGE_THREADS ) ; } String writeBlocked = appSettings . getProperty ( "write_Blocked" , DEFAULT_WRITE_BLOCKED ) ; if ( ! ( ( writeBlocked . equals ( "true" ) ) || ( writeBlocked . equals ( "false" ) ) ) ) { errorMsg = invalidPropertyMessage ( "write_Blocked" , APP_CFG_FILENAME , DEFAULT_WRITE_BLOCKED ) ; Main . logger . warning ( errorMsg ) ; appSetting . setProperty ( "write_Blocked" , DEFAULT_WRITE_BLOCKED ) ; } String baseUrl = appSettings . getProperty ( "base_url" , DEFAULT_BASE_URL ) ; errorMsg = invalidPropertyMessage ( "base_url" , APP_CFG_FILENAME , DEFAULT_BASE_URL ) ; try { new URL ( baseUrl ) ; } catch ( MalformedURLException mue ) { Main . logger . warning ( errorMsg ) ; appSetting . setProperty ( "base_url" , DEFAULT_BASE_URL ) ; } String subPages = appSettings . getProperty ( "sub_pages" , DEFAULT_SUB_PAGES ) ; <START_BUG> if ( subPages . matches ( "([a-zA-Z]+;+[0-9]+,)*+[a-zA-Z]+;+[0-9]+$" ) ) { <END_BUG> errorMsg = invalidPropertyMessage ( "sub_pages" , APP_CFG_FILENAME , DEFAULT_SUB_PAGES ) ; Main . logger . warning ( errorMsg ) ; appSetting . setProperty ( "sub_pages" , DEFAULT_SUB_PAGES ) ; } return appSetting ; } public void addPropertyChangeListener ( PropertyChangeListener listener ) { } class Shutdown extends Thread { @ Override public void run ( ) { } } }

Fix:
if ( ! ( subPages . matches ( "([a-zA-Z]+;+[0-9]+,)*+[a-zA-Z]+;+[0-9]+$" ) ) ) {