Regular Expressions 101

Save & Share

  • Regex Version: ver. 1
  • Update Regex
    ctrl+⇧+s
  • Save new Regex
    ctrl+s
  • Add to Community Library

Flavor

  • PCRE2 (PHP >=7.3)
  • PCRE (PHP <7.3)
  • ECMAScript (JavaScript)
  • Python
  • Golang
  • Java 8
  • .NET 7.0 (C#)
  • Rust
  • Regex Flavor Guide

Function

  • Match
  • Substitution
  • List
  • Unit Tests

Tools

Sponsors
There are currently no sponsors. Become a sponsor today!
An explanation of your regex will be automatically generated as you type.
Detailed match information will be displayed here automatically.
  • All Tokens
  • Common Tokens
  • General Tokens
  • Anchors
  • Meta Sequences
  • Quantifiers
  • Group Constructs
  • Character Classes
  • Flags/Modifiers
  • Substitution
  • A single character of: a, b or c
    [abc]
  • A character except: a, b or c
    [^abc]
  • A character in the range: a-z
    [a-z]
  • A character not in the range: a-z
    [^a-z]
  • A character in the range: a-z or A-Z
    [a-zA-Z]
  • Any single character
    .
  • Alternate - match either a or b
    a|b
  • Any whitespace character
    \s
  • Any non-whitespace character
    \S
  • Any digit
    \d
  • Any non-digit
    \D
  • Any word character
    \w
  • Any non-word character
    \W
  • Non-capturing group
    (?:...)
  • Capturing group
    (...)
  • Zero or one of a
    a?
  • Zero or more of a
    a*
  • One or more of a
    a+
  • Exactly 3 of a
    a{3}
  • 3 or more of a
    a{3,}
  • Between 3 and 6 of a
    a{3,6}
  • Start of string
    ^
  • End of string
    $
  • A word boundary
    \b
  • Non-word boundary
    \B

Regular Expression

/
/
gU

Test String

Code Generator

Generated Code

#include <StringConstants.au3> ; to declare the Constants of StringRegExp #include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate Local $sRegex = "(?U)(?<!\$)(\b\S+?\b)" Local $sString = "<?php" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ "/* Quit */" & @CRLF & _ "defined('ABSPATH') OR exit;" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ "/**" & @CRLF & _ "* Cachify" & @CRLF & _ "*/" & @CRLF & _ "" & @CRLF & _ "final class Cachify {" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Plugin-Optionen" & @CRLF & _ " *" & @CRLF & _ " * @since 2.0" & @CRLF & _ " * @var array" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " private static $options;" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Cache-Methode" & @CRLF & _ " *" & @CRLF & _ " * @since 2.0" & @CRLF & _ " * @var object" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " private static $method;" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Method settings" & @CRLF & _ " *" & @CRLF & _ " * @since 2.0.9" & @CRLF & _ " * @var integer" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " const METHOD_DB = 0;" & @CRLF & _ " const METHOD_APC = 1;" & @CRLF & _ " const METHOD_HDD = 2;" & @CRLF & _ " const METHOD_MMC = 3;" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Minify settings" & @CRLF & _ " *" & @CRLF & _ " * @since 2.0.9" & @CRLF & _ " * @var integer" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " const MINIFY_DISABLED = 0;" & @CRLF & _ " const MINIFY_HTML_ONLY = 1;" & @CRLF & _ " const MINIFY_HTML_JS = 2;" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Pseudo-Konstruktor der Klasse" & @CRLF & _ " *" & @CRLF & _ " * @since 2.0.5" & @CRLF & _ " * @change 2.0.5" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function instance()" & @CRLF & _ " {" & @CRLF & _ " new self();" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Konstruktor der Klasse" & @CRLF & _ " *" & @CRLF & _ " * @since 1.0.0" & @CRLF & _ " * @change 2.1.3" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public function __construct()" & @CRLF & _ " {" & @CRLF & _ " /* Filter */" & @CRLF & _ " if ( ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) OR ( defined('DONOTCACHEPAGE') && DONOTCACHEPAGE ) ) {" & @CRLF & _ " return;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Set defaults */" & @CRLF & _ " self::_set_default_vars();" & @CRLF & _ "" & @CRLF & _ " /* Publish-Hooks */" & @CRLF & _ " self::_register_publish_hooks();" & @CRLF & _ "" & @CRLF & _ " /* Flush Hook */" & @CRLF & _ " add_action(" & @CRLF & _ " 'cachify_flush_cache'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'flush_total_cache'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ " add_action(" & @CRLF & _ " '_core_updated_successfully'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'flush_total_cache'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ " add_action(" & @CRLF & _ " 'switch_theme'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'flush_total_cache'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ "" & @CRLF & _ " /* Backend */" & @CRLF & _ " if ( is_admin() ) {" & @CRLF & _ " add_action(" & @CRLF & _ " 'wpmu_new_blog'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'install_later'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ " add_action(" & @CRLF & _ " 'delete_blog'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'uninstall_later'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ "" & @CRLF & _ " add_action(" & @CRLF & _ " 'admin_init'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'register_textdomain'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ " add_action(" & @CRLF & _ " 'admin_init'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'register_settings'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ " add_action(" & @CRLF & _ " 'admin_init'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'process_flush_request'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ " add_action(" & @CRLF & _ " 'admin_menu'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'add_page'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ " add_action(" & @CRLF & _ " 'admin_enqueue_scripts'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'add_admin_resources'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ "" & @CRLF & _ " add_action(" & @CRLF & _ " 'transition_comment_status'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'touch_comment'" & @CRLF & _ " )," & @CRLF & _ " 10," & @CRLF & _ " 3" & @CRLF & _ " );" & @CRLF & _ " add_action(" & @CRLF & _ " 'edit_comment'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'edit_comment'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ " add_action(" & @CRLF & _ " 'admin_bar_menu'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'add_flush_icon'" & @CRLF & _ " )," & @CRLF & _ " 90" & @CRLF & _ " );" & @CRLF & _ " add_action(" & @CRLF & _ " 'dashboard_glance_items'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'add_dashboard_count'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ " add_action(" & @CRLF & _ " 'post_submitbox_misc_actions'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'print_flush_dropdown'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ "" & @CRLF & _ " add_filter(" & @CRLF & _ " 'plugin_row_meta'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'row_meta'" & @CRLF & _ " )," & @CRLF & _ " 10," & @CRLF & _ " 2" & @CRLF & _ " );" & @CRLF & _ " add_filter(" & @CRLF & _ " 'plugin_action_links_' .CACHIFY_BASE," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'action_links'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ "" & @CRLF & _ " /* Frontend */" & @CRLF & _ " } else {" & @CRLF & _ " add_action(" & @CRLF & _ " 'pre_comment_approved'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'pre_comment'" & @CRLF & _ " )," & @CRLF & _ " 99," & @CRLF & _ " 2" & @CRLF & _ " );" & @CRLF & _ " add_action(" & @CRLF & _ " 'template_redirect'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'manage_cache'" & @CRLF & _ " )," & @CRLF & _ " 0" & @CRLF & _ " );" & @CRLF & _ " add_action(" & @CRLF & _ " 'robots_txt'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'robots_txt'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Deactivation hook" & @CRLF & _ " *" & @CRLF & _ " * @since 2.1.0" & @CRLF & _ " * @change 2.1.0" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function on_deactivation()" & @CRLF & _ " {" & @CRLF & _ " self::flush_total_cache();" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Activation hook" & @CRLF & _ " *" & @CRLF & _ " * @since 1.0" & @CRLF & _ " * @change 2.1.0" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function on_activation()" & @CRLF & _ " {" & @CRLF & _ " /* Multisite & Network */" & @CRLF & _ " if ( is_multisite() && ! empty($_GET['networkwide']) ) {" & @CRLF & _ " /* Blog-IDs */" & @CRLF & _ " $ids = self::_get_blog_ids();" & @CRLF & _ "" & @CRLF & _ " /* Loopen */" & @CRLF & _ " foreach ($ids as $id) {" & @CRLF & _ " switch_to_blog( (int)$id );" & @CRLF & _ " self::_install_backend();" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Wechsel zurück */" & @CRLF & _ " restore_current_blog();" & @CRLF & _ "" & @CRLF & _ " } else {" & @CRLF & _ " self::_install_backend();" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Plugin-Installation bei neuen MU-Blogs" & @CRLF & _ " *" & @CRLF & _ " * @since 1.0" & @CRLF & _ " * @change 1.0" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function install_later($id) {" & @CRLF & _ " /* Kein Netzwerk-Plugin */" & @CRLF & _ " if ( ! is_plugin_active_for_network(CACHIFY_BASE) ) {" & @CRLF & _ " return;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Wechsel */" & @CRLF & _ " switch_to_blog( (int)$id );" & @CRLF & _ "" & @CRLF & _ " /* Installieren */" & @CRLF & _ " self::_install_backend();" & @CRLF & _ "" & @CRLF & _ " /* Wechsel zurück */" & @CRLF & _ " restore_current_blog();" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Eigentliche Installation der Optionen" & @CRLF & _ " *" & @CRLF & _ " * @since 1.0" & @CRLF & _ " * @change 2.0" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " private static function _install_backend()" & @CRLF & _ " {" & @CRLF & _ " add_option(" & @CRLF & _ " 'cachify'," & @CRLF & _ " array()" & @CRLF & _ " );" & @CRLF & _ "" & @CRLF & _ " /* Flush */" & @CRLF & _ " self::flush_total_cache();" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Deinstallation des Plugins pro MU-Blog" & @CRLF & _ " *" & @CRLF & _ " * @since 1.0" & @CRLF & _ " * @change 2.1.0" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function on_uninstall()" & @CRLF & _ " {" & @CRLF & _ " /* Global */" & @CRLF & _ " global $wpdb;" & @CRLF & _ "" & @CRLF & _ " /* Multisite & Network */" & @CRLF & _ " if ( is_multisite() && !empty($_GET['networkwide']) ) {" & @CRLF & _ " /* Alter Blog */" & @CRLF & _ " $old = $wpdb->blogid;" & @CRLF & _ "" & @CRLF & _ " /* Blog-IDs */" & @CRLF & _ " $ids = self::_get_blog_ids();" & @CRLF & _ "" & @CRLF & _ " /* Loopen */" & @CRLF & _ " foreach ($ids as $id) {" & @CRLF & _ " switch_to_blog($id);" & @CRLF & _ " self::_uninstall_backend();" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Wechsel zurück */" & @CRLF & _ " switch_to_blog($old);" & @CRLF & _ " } else {" & @CRLF & _ " self::_uninstall_backend();" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Deinstallation des Plugins bei MU & Network" & @CRLF & _ " *" & @CRLF & _ " * @since 1.0" & @CRLF & _ " * @change 1.0" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function uninstall_later($id)" & @CRLF & _ " {" & @CRLF & _ " /* Kein Netzwerk-Plugin */" & @CRLF & _ " if ( ! is_plugin_active_for_network(CACHIFY_BASE) ) {" & @CRLF & _ " return;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Wechsel */" & @CRLF & _ " switch_to_blog( (int)$id );" & @CRLF & _ "" & @CRLF & _ " /* Installieren */" & @CRLF & _ " self::_uninstall_backend();" & @CRLF & _ "" & @CRLF & _ " /* Wechsel zurück */" & @CRLF & _ " restore_current_blog();" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Eigentliche Deinstallation des Plugins" & @CRLF & _ " *" & @CRLF & _ " * @since 1.0" & @CRLF & _ " * @change 1.0" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " private static function _uninstall_backend()" & @CRLF & _ " {" & @CRLF & _ " /* Option */" & @CRLF & _ " delete_option('cachify');" & @CRLF & _ "" & @CRLF & _ " /* Cache leeren */" & @CRLF & _ " self::flush_total_cache();" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Rückgabe der IDs installierter Blogs" & @CRLF & _ " *" & @CRLF & _ " * @since 1.0" & @CRLF & _ " * @change 1.0" & @CRLF & _ " *" & @CRLF & _ " * @return array Blog-IDs" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " private static function _get_blog_ids()" & @CRLF & _ " {" & @CRLF & _ " /* Global */" & @CRLF & _ " global $wpdb;" & @CRLF & _ "" & @CRLF & _ " return $wpdb->get_col("SELECT blog_id FROM `$wpdb->blogs`");" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Eigenschaften des Objekts" & @CRLF & _ " *" & @CRLF & _ " * @since 2.0" & @CRLF & _ " * @change 2.0.7" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " private static function _set_default_vars()" & @CRLF & _ " {" & @CRLF & _ " /* Optionen */" & @CRLF & _ " self::$options = self::_get_options();" & @CRLF & _ "" & @CRLF & _ " /* APC */" & @CRLF & _ " if ( self::$options['use_apc'] === self::METHOD_APC && Cachify_APC::is_available() ) {" & @CRLF & _ " self::$method = new Cachify_APC;" & @CRLF & _ "" & @CRLF & _ " /* HDD */" & @CRLF & _ " } else if ( self::$options['use_apc'] === self::METHOD_HDD && Cachify_HDD::is_available() ) {" & @CRLF & _ " self::$method = new Cachify_HDD;" & @CRLF & _ "" & @CRLF & _ " /* MEMCACHED */" & @CRLF & _ " } else if ( self::$options['use_apc'] === self::METHOD_MMC && Cachify_MEMCACHED::is_available() ) {" & @CRLF & _ " self::$method = new Cachify_MEMCACHED;" & @CRLF & _ "" & @CRLF & _ " /* DB */" & @CRLF & _ " } else {" & @CRLF & _ " self::$method = new Cachify_DB;" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Rückgabe der Optionen" & @CRLF & _ " *" & @CRLF & _ " * @since 2.0" & @CRLF & _ " * @change 2.1.2" & @CRLF & _ " *" & @CRLF & _ " * @return array $diff Array mit Werten" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " private static function _get_options()" & @CRLF & _ " {" & @CRLF & _ " return wp_parse_args(" & @CRLF & _ " get_option('cachify')," & @CRLF & _ " array(" & @CRLF & _ " 'only_guests' => 1," & @CRLF & _ " 'compress_html' => self::MINIFY_DISABLED," & @CRLF & _ " 'cache_expires' => 12," & @CRLF & _ " 'without_ids' => ''," & @CRLF & _ " 'without_agents' => ''," & @CRLF & _ " 'use_apc' => self::METHOD_DB," & @CRLF & _ " 'reset_on_comment' => 0" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Hinzufügen der Action-Links" & @CRLF & _ " *" & @CRLF & _ " * @since 1.0" & @CRLF & _ " * @change 2.0.2" & @CRLF & _ " *" & @CRLF & _ " * @param string $data Ursprungsinhalt der dynamischen robots.txt" & @CRLF & _ " * @return string $data Modifizierter Inhalt der robots.txt" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function robots_txt($data)" & @CRLF & _ " {" & @CRLF & _ " /* HDD only */" & @CRLF & _ " if ( self::$options['use_apc'] !== self::METHOD_HDD ) {" & @CRLF & _ " return $data;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Pfad */" & @CRLF & _ " $path = parse_url(site_url(), PHP_URL_PATH);" & @CRLF & _ "" & @CRLF & _ " /* Ausgabe */" & @CRLF & _ " $data .= sprintf(" & @CRLF & _ " 'Disallow: %s/wp-content/cache/%s'," & @CRLF & _ " ( empty($path) ? '' : $path )," & @CRLF & _ " "\n"" & @CRLF & _ " );" & @CRLF & _ "" & @CRLF & _ " return $data;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Hinzufügen der Action-Links" & @CRLF & _ " *" & @CRLF & _ " * @since 1.0" & @CRLF & _ " * @change 1.0" & @CRLF & _ " *" & @CRLF & _ " * @param array $data Bereits existente Links" & @CRLF & _ " * @return array $data Erweitertes Array mit Links" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function action_links($data)" & @CRLF & _ " {" & @CRLF & _ " /* Rechte? */" & @CRLF & _ " if ( ! current_user_can('manage_options') ) {" & @CRLF & _ " return $data;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " return array_merge(" & @CRLF & _ " $data," & @CRLF & _ " array(" & @CRLF & _ " sprintf(" & @CRLF & _ " '<a href="%s">%s</a>'," & @CRLF & _ " add_query_arg(" & @CRLF & _ " array(" & @CRLF & _ " 'page' => 'cachify'" & @CRLF & _ " )," & @CRLF & _ " admin_url('options-general.php')" & @CRLF & _ " )," & @CRLF & _ " __('Settings')" & @CRLF & _ " )" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Meta-Links des Plugins" & @CRLF & _ " *" & @CRLF & _ " * @since 0.5" & @CRLF & _ " * @change 2.0.5" & @CRLF & _ " *" & @CRLF & _ " * @param array $input Bereits vorhandene Links" & @CRLF & _ " * @param string $page Aktuelle Seite" & @CRLF & _ " * @return array $data Modifizierte Links" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function row_meta($input, $page)" & @CRLF & _ " {" & @CRLF & _ " /* Rechte */" & @CRLF & _ " if ( $page != CACHIFY_BASE ) {" & @CRLF & _ " return $input;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " return array_merge(" & @CRLF & _ " $input," & @CRLF & _ " array(" & @CRLF & _ " '<a href="https://flattr.com/t/1327625" target="_blank">Flattr</a>'," & @CRLF & _ " '<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=5RDDW9FEHGLG6" target="_blank">PayPal</a>'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Hinzufügen eines Admin-Bar-Menüs" & @CRLF & _ " *" & @CRLF & _ " * @since 1.2" & @CRLF & _ " * @change 2.1.4" & @CRLF & _ " *" & @CRLF & _ " * @param object Objekt mit Menü-Eigenschaften" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function add_flush_icon($wp_admin_bar)" & @CRLF & _ " {" & @CRLF & _ " /* Aussteigen */" & @CRLF & _ " if ( ! is_admin_bar_showing() OR ! is_super_admin() ) {" & @CRLF & _ " return;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Hinzufügen */" & @CRLF & _ " $wp_admin_bar->add_menu(" & @CRLF & _ " array(" & @CRLF & _ " 'id' => 'cachify'," & @CRLF & _ " 'href' => add_query_arg('_cachify', 'flush')," & @CRLF & _ " 'parent' => 'top-secondary'," & @CRLF & _ " 'title' => '<span class="ab-icon dashicons dashicons-post-trash" style="top:2px;margin:0"></span>'," & @CRLF & _ " 'meta' => array( 'title' => __('Flush the cachify cache', 'cachify') )" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Anzeige des Spam-Counters auf dem Dashboard" & @CRLF & _ " *" & @CRLF & _ " * @since 2.0.0" & @CRLF & _ " * @change 2.1.3" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function add_dashboard_count()" & @CRLF & _ " {" & @CRLF & _ " /* Cache size */" & @CRLF & _ " $size = self::get_cache_size();" & @CRLF & _ "" & @CRLF & _ " /* Caching method */" & @CRLF & _ " $method = call_user_func(" & @CRLF & _ " array(" & @CRLF & _ " self::$method," & @CRLF & _ " 'stringify‎_method'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ "" & @CRLF & _ " /* Print the link */" & @CRLF & _ " echo sprintf(" & @CRLF & _ " '<li>" & @CRLF & _ " <a href="%s" class="cachify-icon cachify-icon--%s" title="%s: %s">" & @CRLF & _ " %s Cache" & @CRLF & _ " </a>" & @CRLF & _ " </li>'," & @CRLF & _ " add_query_arg(" & @CRLF & _ " array(" & @CRLF & _ " 'page' => 'cachify'" & @CRLF & _ " )," & @CRLF & _ " admin_url('options-general.php')" & @CRLF & _ " )," & @CRLF & _ " esc_attr(strtolower($method))," & @CRLF & _ " __('Caching method', 'cachify')," & @CRLF & _ " esc_attr($method)," & @CRLF & _ " ( empty($size) ? __('Empty', 'cachify') : size_format($size) )" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Rückgabe der Cache-Größe" & @CRLF & _ " *" & @CRLF & _ " * @since 2.0.6" & @CRLF & _ " * @change 2.0.6" & @CRLF & _ " *" & @CRLF & _ " * @param integer $size Cache-Größe in Bytes" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function get_cache_size()" & @CRLF & _ " {" & @CRLF & _ " if ( ! $size = get_transient('cachify_cache_size') ) {" & @CRLF & _ " /* Auslesen */" & @CRLF & _ " $size = (int) call_user_func(" & @CRLF & _ " array(" & @CRLF & _ " self::$method," & @CRLF & _ " 'get_stats'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ "" & @CRLF & _ " /* Speichern */" & @CRLF & _ " set_transient(" & @CRLF & _ " 'cachify_cache_size'," & @CRLF & _ " $size," & @CRLF & _ " 60 * 15" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " return $size;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Verarbeitung der Plugin-Meta-Aktionen" & @CRLF & _ " *" & @CRLF & _ " * @since 0.5" & @CRLF & _ " * @change 2.1.3" & @CRLF & _ " *" & @CRLF & _ " * @param array $data Metadaten der Plugins" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function process_flush_request($data)" & @CRLF & _ " {" & @CRLF & _ " /* Leer? */" & @CRLF & _ " if ( empty($_GET['_cachify']) OR $_GET['_cachify'] !== 'flush' OR ! is_super_admin() ) {" & @CRLF & _ " return;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Global */" & @CRLF & _ " global $wpdb;" & @CRLF & _ "" & @CRLF & _ " /* Multisite & Network */" & @CRLF & _ " if ( is_multisite() && is_plugin_active_for_network(CACHIFY_BASE) ) {" & @CRLF & _ " /* Alter Blog */" & @CRLF & _ " $old = $wpdb->blogid;" & @CRLF & _ "" & @CRLF & _ " /* Blog-IDs */" & @CRLF & _ " $ids = self::_get_blog_ids();" & @CRLF & _ "" & @CRLF & _ " /* Loopen */" & @CRLF & _ " foreach ($ids as $id) {" & @CRLF & _ " switch_to_blog($id);" & @CRLF & _ " self::flush_total_cache();" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Wechsel zurück */" & @CRLF & _ " switch_to_blog($old);" & @CRLF & _ "" & @CRLF & _ " /* Notiz */" & @CRLF & _ " add_action(" & @CRLF & _ " 'network_admin_notices'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'flush_notice'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ " } else {" & @CRLF & _ " /* Leeren */" & @CRLF & _ " self::flush_total_cache();" & @CRLF & _ "" & @CRLF & _ " /* Notiz */" & @CRLF & _ " add_action(" & @CRLF & _ " 'admin_notices'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'flush_notice'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Hinweis nach erfolgreichem Cache-Leeren" & @CRLF & _ " *" & @CRLF & _ " * @since 1.2" & @CRLF & _ " * @change 2.1.3" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function flush_notice()" & @CRLF & _ " {" & @CRLF & _ " /* Kein Admin */" & @CRLF & _ " if ( ! is_super_admin() ) {" & @CRLF & _ " return false;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " echo sprintf(" & @CRLF & _ " '<div id="message" class="updated"><p><strong>%s</strong></p></div>'," & @CRLF & _ " __('Cachify cache is flushed.', 'cachify')" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Löschung des Cache beim Kommentar-Editieren" & @CRLF & _ " *" & @CRLF & _ " * @since 0.1.0" & @CRLF & _ " * @change 2.1.2" & @CRLF & _ " *" & @CRLF & _ " * @param integer $id ID des Kommentars" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function edit_comment($id)" & @CRLF & _ " {" & @CRLF & _ " if ( self::$options['reset_on_comment'] ) {" & @CRLF & _ " self::flush_total_cache();" & @CRLF & _ " } else {" & @CRLF & _ " self::remove_page_cache_by_post_id(" & @CRLF & _ " get_comment($id)->comment_post_ID" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Löschung des Cache beim neuen Kommentar" & @CRLF & _ " *" & @CRLF & _ " * @since 0.1.0" & @CRLF & _ " * @change 2.1.2" & @CRLF & _ " *" & @CRLF & _ " * @param mixed $approved Kommentar-Status" & @CRLF & _ " * @param array $comment Array mit Eigenschaften" & @CRLF & _ " * @return mixed $approved Kommentar-Status" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function pre_comment($approved, $comment)" & @CRLF & _ " {" & @CRLF & _ " /* Approved comment? */" & @CRLF & _ " if ( $approved === 1 ) {" & @CRLF & _ " if ( self::$options['reset_on_comment'] ) {" & @CRLF & _ " self::flush_total_cache();" & @CRLF & _ " } else {" & @CRLF & _ " self::remove_page_cache_by_post_id( $comment['comment_post_ID'] );" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " return $approved;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Löschung des Cache beim Editieren der Kommentare" & @CRLF & _ " *" & @CRLF & _ " * @since 0.1" & @CRLF & _ " * @change 2.1.2" & @CRLF & _ " *" & @CRLF & _ " * @param string $new_status Neuer Status" & @CRLF & _ " * @param string $old_status Alter Status" & @CRLF & _ " * @param object $comment Array mit Eigenschaften" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function touch_comment($new_status, $old_status, $comment)" & @CRLF & _ " {" & @CRLF & _ " if ( $new_status != $old_status ) {" & @CRLF & _ " if ( self::$options['reset_on_comment'] ) {" & @CRLF & _ " self::flush_total_cache();" & @CRLF & _ " } else {" & @CRLF & _ " self::remove_page_cache_by_post_id( $comment->comment_post_ID );" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Generierung von Publish-Hooks für Custom Post Types" & @CRLF & _ " *" & @CRLF & _ " * @since 2.0.3" & @CRLF & _ " * @change 2.1.3" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " private static function _register_publish_hooks() {" & @CRLF & _ " /* Available post types */" & @CRLF & _ " $post_types = get_post_types(" & @CRLF & _ " array('public' => true)" & @CRLF & _ " );" & @CRLF & _ "" & @CRLF & _ " /* Empty data? */" & @CRLF & _ " if ( empty($post_types) ) {" & @CRLF & _ " return;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Loopen */" & @CRLF & _ " foreach ( $post_types as $post_type ) {" & @CRLF & _ " add_action(" & @CRLF & _ " 'publish_' .$post_type," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'publish_post_types'" & @CRLF & _ " )," & @CRLF & _ " 10," & @CRLF & _ " 2" & @CRLF & _ " );" & @CRLF & _ " add_action(" & @CRLF & _ " 'publish_future_' .$post_type," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'flush_total_cache'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Removes the post type cache on updates" & @CRLF & _ " *" & @CRLF & _ " * @since 2.0.3" & @CRLF & _ " * @change 2.1.3" & @CRLF & _ " *" & @CRLF & _ " * @param integer $post_ID Post ID" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function publish_post_types($post_ID, $post) {" & @CRLF & _ " /* No Post_ID? */" & @CRLF & _ " if ( empty($post_ID) OR empty($post) ) {" & @CRLF & _ " return;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Post status check */" & @CRLF & _ " if ( ! in_array( $post->post_status, array('publish', 'future') ) ) {" & @CRLF & _ " return;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Check for post var AND flush */" & @CRLF & _ " if ( ! isset($_POST['_cachify_remove_post_type_cache_on_update']) ) {" & @CRLF & _ " return self::flush_total_cache();" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Security */" & @CRLF & _ " check_admin_referer(CACHIFY_BASE, '_cachify_status_nonce');" & @CRLF & _ "" & @CRLF & _ " /* Save as var */" & @CRLF & _ " $remove_post_type_cache = (int)$_POST['_cachify_remove_post_type_cache_on_update'];" & @CRLF & _ "" & @CRLF & _ " /* Save as user meta */" & @CRLF & _ " update_user_meta(" & @CRLF & _ " get_current_user_id()," & @CRLF & _ " '_cachify_remove_post_type_cache_on_update'," & @CRLF & _ " $remove_post_type_cache" & @CRLF & _ " );" & @CRLF & _ "" & @CRLF & _ " /* Remove cache OR flush */" & @CRLF & _ " if ( $remove_post_type_cache ) {" & @CRLF & _ " self::remove_page_cache_by_post_id( $post_ID );" & @CRLF & _ " } else {" & @CRLF & _ " self::flush_total_cache();" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Removes a page id from cache" & @CRLF & _ " *" & @CRLF & _ " * @since 2.0.3" & @CRLF & _ " * @change 2.1.3" & @CRLF & _ " *" & @CRLF & _ " * @param integer $post_ID Post ID" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function remove_page_cache_by_post_id($post_ID)" & @CRLF & _ " {" & @CRLF & _ " self::remove_page_cache_by_url(" & @CRLF & _ " get_permalink( $post_ID )" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Removes a page url from cache" & @CRLF & _ " *" & @CRLF & _ " * @since 0.1" & @CRLF & _ " * @change 2.1.3" & @CRLF & _ " *" & @CRLF & _ " * @param string $url Page URL" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function remove_page_cache_by_url($url)" & @CRLF & _ " {" & @CRLF & _ " call_user_func(" & @CRLF & _ " array(" & @CRLF & _ " self::$method," & @CRLF & _ " 'delete_item'" & @CRLF & _ " )," & @CRLF & _ " self::_cache_hash( $url )," & @CRLF & _ " $url" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Rückgabe der Cache-Gültigkeit" & @CRLF & _ " *" & @CRLF & _ " * @since 2.0" & @CRLF & _ " * @change 2.0" & @CRLF & _ " *" & @CRLF & _ " * @return intval Gültigkeit in Sekunden" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " private static function _cache_expires()" & @CRLF & _ " {" & @CRLF & _ " return 60 * 60 * self::$options['cache_expires'];" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Rückgabe des Cache-Hash-Wertes" & @CRLF & _ " *" & @CRLF & _ " * @since 0.1" & @CRLF & _ " * @change 2.0" & @CRLF & _ " *" & @CRLF & _ " * @param string $url URL für den Hash-Wert [optional]" & @CRLF & _ " * @return string Cachify-Hash-Wert" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " private static function _cache_hash($url = '')" & @CRLF & _ " {" & @CRLF & _ " return md5(" & @CRLF & _ " empty($url) ? ( $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ) : ( parse_url($url, PHP_URL_HOST) . parse_url($url, PHP_URL_PATH) )" & @CRLF & _ " ) . '.cachify';" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Splittung nach Komma" & @CRLF & _ " *" & @CRLF & _ " * @since 0.9.1" & @CRLF & _ " * @change 1.0" & @CRLF & _ " *" & @CRLF & _ " * @param string $input Zu splittende Zeichenkette" & @CRLF & _ " * @return array Konvertierter Array" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " private static function _preg_split($input)" & @CRLF & _ " {" & @CRLF & _ " return (array)preg_split('/,/', $input, -1, PREG_SPLIT_NO_EMPTY);" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Prüfung auf Index" & @CRLF & _ " *" & @CRLF & _ " * @since 0.6" & @CRLF & _ " * @change 1.0" & @CRLF & _ " *" & @CRLF & _ " * @return boolean TRUE bei Index" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " private static function _is_index()" & @CRLF & _ " {" & @CRLF & _ " return basename($_SERVER['SCRIPT_NAME']) != 'index.php';" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Prüfung auf Mobile Devices" & @CRLF & _ " *" & @CRLF & _ " * @since 0.9.1" & @CRLF & _ " * @change 2.0.7" & @CRLF & _ " *" & @CRLF & _ " * @return boolean TRUE bei Mobile" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " private static function _is_mobile()" & @CRLF & _ " {" & @CRLF & _ " return ( strpos(TEMPLATEPATH, 'wptouch') or strpos(TEMPLATEPATH, 'carrington') or strpos(TEMPLATEPATH, 'jetpack') or strpos(TEMPLATEPATH, 'handheld') );" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Prüfung auf eingeloggte und kommentierte Nutzer" & @CRLF & _ " *" & @CRLF & _ " * @since 2.0.0" & @CRLF & _ " * @change 2.0.5" & @CRLF & _ " *" & @CRLF & _ " * @return boolean $diff TRUE bei "vermerkten" Nutzern" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " private static function _is_logged_in()" & @CRLF & _ " {" & @CRLF & _ " /* Eingeloggt */" & @CRLF & _ " if ( is_user_logged_in() ) {" & @CRLF & _ " return true;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Cookie? */" & @CRLF & _ " if ( empty($_COOKIE) ) {" & @CRLF & _ " return false;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Loopen */" & @CRLF & _ " foreach ( $_COOKIE as $k => $v) {" & @CRLF & _ " if ( preg_match('/^(wp-postpass|wordpress_logged_in|comment_author)_/', $k) ) {" & @CRLF & _ " return true;" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Definition der Ausnahmen für den Cache" & @CRLF & _ " *" & @CRLF & _ " * @since 0.2" & @CRLF & _ " * @change 2.1.1" & @CRLF & _ " *" & @CRLF & _ " * @return boolean TRUE bei Ausnahmen" & @CRLF & _ " *" & @CRLF & _ " * @hook boolean cachify_skip_cache" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " private static function _skip_cache()" & @CRLF & _ " {" & @CRLF & _ " /* No cache hook */" & @CRLF & _ " if ( apply_filters('cachify_skip_cache', false) ) {" & @CRLF & _ " return true;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Conditional Tags */" & @CRLF & _ " if ( self::_is_index() or is_search() or is_404() or is_feed() or is_trackback() or is_robots() or is_preview() or post_password_required() ) {" & @CRLF & _ " return true;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Plugin options */" & @CRLF & _ " $options = self::$options;" & @CRLF & _ "" & @CRLF & _ " /* Request vars */" & @CRLF & _ " if ( !empty($_POST) OR (!empty($_GET) && get_option('permalink_structure')) ) {" & @CRLF & _ " return true;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Logged in */" & @CRLF & _ " if ( $options['only_guests'] && self::_is_logged_in() ) {" & @CRLF & _ " return true;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Mobile request */" & @CRLF & _ " if ( self::_is_mobile() ) {" & @CRLF & _ " return true;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Post IDs */" & @CRLF & _ " if ( $options['without_ids'] && is_singular() ) {" & @CRLF & _ " if ( in_array( $GLOBALS['wp_query']->get_queried_object_id(), self::_preg_split($options['without_ids']) ) ) {" & @CRLF & _ " return true;" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* User Agents */" & @CRLF & _ " if ( $options['without_agents'] && isset($_SERVER['HTTP_USER_AGENT']) ) {" & @CRLF & _ " if ( array_filter( self::_preg_split($options['without_agents']), create_function('$a', 'return strpos($_SERVER["HTTP_USER_AGENT"], $a);') ) ) {" & @CRLF & _ " return true;" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " return false;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Minimierung des HTML-Codes" & @CRLF & _ " *" & @CRLF & _ " * @since 0.9.2" & @CRLF & _ " * @change 2.0.9" & @CRLF & _ " *" & @CRLF & _ " * @param string $data Zu minimierender Datensatz" & @CRLF & _ " * @return string $data Minimierter Datensatz" & @CRLF & _ " *" & @CRLF & _ " * @hook array cachify_minify_ignore_tags" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " private static function _minify_cache($data) {" & @CRLF & _ " /* Disabled? */" & @CRLF & _ " if ( ! self::$options['compress_html'] ) {" & @CRLF & _ " return($data);" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Ignore this html tags */" & @CRLF & _ " $ignore_tags = (array)apply_filters(" & @CRLF & _ " 'cachify_minify_ignore_tags'," & @CRLF & _ " array(" & @CRLF & _ " 'textarea'," & @CRLF & _ " 'pre'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ "" & @CRLF & _ " /* Add the script tag */" & @CRLF & _ " if ( self::$options['compress_html'] !== self::MINIFY_HTML_JS ) {" & @CRLF & _ " $ignore_tags[] = 'script';" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Empty blacklist? | TODO: Make better */" & @CRLF & _ " if ( ! $ignore_tags ) {" & @CRLF & _ " return($data);" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Convert to string */" & @CRLF & _ " $ignore_regex = implode('|', $ignore_tags);" & @CRLF & _ "" & @CRLF & _ " /* Minify */" & @CRLF & _ " $cleaned = preg_replace(" & @CRLF & _ " array(" & @CRLF & _ " '/<!--[^\[><](.*?)-->/s'," & @CRLF & _ " '#(?ix)(?>[^\S ]\s*|\s{2,})(?=(?:(?:[^<]++|<(?!/?(?:' .$ignore_regex. ')\b))*+)(?:<(?>' .$ignore_regex. ')\b|\z))#'" & @CRLF & _ " )," & @CRLF & _ " array(" & @CRLF & _ " ''," & @CRLF & _ " ' '" & @CRLF & _ " )," & @CRLF & _ " (string) $data" & @CRLF & _ " );" & @CRLF & _ "" & @CRLF & _ " /* Fault */" & @CRLF & _ " if ( strlen($cleaned) <= 1 ) {" & @CRLF & _ " return($data);" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " return $cleaned;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Zurücksetzen des kompletten Cache" & @CRLF & _ " *" & @CRLF & _ " * @since 0.1" & @CRLF & _ " * @change 2.0" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function flush_total_cache()" & @CRLF & _ " {" & @CRLF & _ " /* DB */" & @CRLF & _ " Cachify_DB::clear_cache();" & @CRLF & _ "" & @CRLF & _ " /* APC */" & @CRLF & _ " Cachify_APC::clear_cache();" & @CRLF & _ "" & @CRLF & _ " /* HDD */" & @CRLF & _ " Cachify_HDD::clear_cache();" & @CRLF & _ "" & @CRLF & _ " /* MEMCACHED */" & @CRLF & _ " Cachify_MEMCACHED::clear_cache();" & @CRLF & _ "" & @CRLF & _ " /* Transient */" & @CRLF & _ " delete_transient('cachify_cache_size');" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Zuweisung des Cache" & @CRLF & _ " *" & @CRLF & _ " * @since 0.1" & @CRLF & _ " * @change 2.0" & @CRLF & _ " *" & @CRLF & _ " * @param string $data Inhalt der Seite" & @CRLF & _ " * @return string $data Inhalt der Seite" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function set_cache($data)" & @CRLF & _ " {" & @CRLF & _ " /* Leer? */" & @CRLF & _ " if ( empty($data) ) {" & @CRLF & _ " return '';" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Speicherung */" & @CRLF & _ " call_user_func(" & @CRLF & _ " array(" & @CRLF & _ " self::$method," & @CRLF & _ " 'store_item'" & @CRLF & _ " )," & @CRLF & _ " self::_cache_hash()," & @CRLF & _ " self::_minify_cache($data)," & @CRLF & _ " self::_cache_expires()" & @CRLF & _ " );" & @CRLF & _ "" & @CRLF & _ " return $data;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Verwaltung des Cache" & @CRLF & _ " *" & @CRLF & _ " * @since 0.1" & @CRLF & _ " * @change 2.0" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function manage_cache()" & @CRLF & _ " {" & @CRLF & _ " /* Kein Caching? */" & @CRLF & _ " if ( self::_skip_cache() ) {" & @CRLF & _ " return;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Daten im Cache */" & @CRLF & _ " $cache = call_user_func(" & @CRLF & _ " array(" & @CRLF & _ " self::$method," & @CRLF & _ " 'get_item'" & @CRLF & _ " )," & @CRLF & _ " self::_cache_hash()" & @CRLF & _ " );" & @CRLF & _ "" & @CRLF & _ " /* Kein Cache? */" & @CRLF & _ " if ( empty($cache) ) {" & @CRLF & _ " ob_start('Cachify::set_cache');" & @CRLF & _ " return;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Cache verarbeiten */" & @CRLF & _ " call_user_func(" & @CRLF & _ " array(" & @CRLF & _ " self::$method," & @CRLF & _ " 'print_cache'" & @CRLF & _ " )," & @CRLF & _ " $cache" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Einbindung von CSS" & @CRLF & _ " *" & @CRLF & _ " * @since 1.0" & @CRLF & _ " * @change 2.1.3" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function add_admin_resources($hook)" & @CRLF & _ " {" & @CRLF & _ " /* Hooks check */" & @CRLF & _ " if ( $hook !== 'index.php' AND $hook !== 'post.php' ) {" & @CRLF & _ " return;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Plugin data */" & @CRLF & _ " $plugin_data = get_plugin_data(CACHIFY_FILE);" & @CRLF & _ "" & @CRLF & _ " /* Register css */" & @CRLF & _ " switch($hook) {" & @CRLF & _ " case 'index.php':" & @CRLF & _ " wp_enqueue_style(" & @CRLF & _ " 'cachify-dashboard'," & @CRLF & _ " plugins_url('css/dashboard.min.css', CACHIFY_FILE)," & @CRLF & _ " array()," & @CRLF & _ " $plugin_data['Version']" & @CRLF & _ " );" & @CRLF & _ " break;" & @CRLF & _ "" & @CRLF & _ " case 'post.php':" & @CRLF & _ " wp_enqueue_script(" & @CRLF & _ " 'cachify-post'," & @CRLF & _ " plugins_url('js/post.min.js', CACHIFY_FILE)," & @CRLF & _ " array('jquery')," & @CRLF & _ " $plugin_data['Version']," & @CRLF & _ " true" & @CRLF & _ " );" & @CRLF & _ " break;" & @CRLF & _ "" & @CRLF & _ " default:" & @CRLF & _ " break;" & @CRLF & _ " }" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Display a combo select on post publish box" & @CRLF & _ " *" & @CRLF & _ " * @since 2.1.3" & @CRLF & _ " * @change 2.1.3" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function print_flush_dropdown()" & @CRLF & _ " {" & @CRLF & _ " /* Post page only */" & @CRLF & _ " if ( empty($GLOBALS['pagenow']) OR $GLOBALS['pagenow'] !== 'post.php' ) {" & @CRLF & _ " return;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Published posts only */" & @CRLF & _ " if ( empty($GLOBALS['post']) OR ! is_object($GLOBALS['post']) OR $GLOBALS['post']->post_status !== 'publish' ) {" & @CRLF & _ " return;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Security */" & @CRLF & _ " wp_nonce_field(CACHIFY_BASE, '_cachify_status_nonce');" & @CRLF & _ "" & @CRLF & _ " /* Already saved? */" & @CRLF & _ " $current_action = (int)get_user_meta(" & @CRLF & _ " get_current_user_id()," & @CRLF & _ " '_cachify_remove_post_type_cache_on_update'," & @CRLF & _ " true" & @CRLF & _ " );" & @CRLF & _ "" & @CRLF & _ " /* Init vars */" & @CRLF & _ " $dropdown_options = '';" & @CRLF & _ " $available_options = array(__('Total cache', 'cachify'), __('Page cache', 'cachify'));" & @CRLF & _ "" & @CRLF & _ " /* Select options */" & @CRLF & _ " foreach( $available_options as $key => $value ) {" & @CRLF & _ " $dropdown_options .= sprintf(" & @CRLF & _ " '<option value="%1$d" %3$s>%2$s</option>'," & @CRLF & _ " $key," & @CRLF & _ " $value," & @CRLF & _ " selected($key, $current_action, false)" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Output */" & @CRLF & _ " echo sprintf(" & @CRLF & _ " '<div class="misc-pub-section" style="border-top:1px solid #eee">" & @CRLF & _ " <label for="cachify_status">" & @CRLF & _ " %1$s: <span id="output-cachify-status">%2$s</span>" & @CRLF & _ " </label>" & @CRLF & _ " <a href="#" class="edit-cachify-status hide-if-no-js">%3$s</a>" & @CRLF & _ "" & @CRLF & _ " <div class="hide-if-js">" & @CRLF & _ " <select name="_cachify_remove_post_type_cache_on_update" id="cachify_status">" & @CRLF & _ " %4$s" & @CRLF & _ " </select>" & @CRLF & _ "" & @CRLF & _ " <a href="#" class="save-cachify-status hide-if-no-js button">%5$s</a>" & @CRLF & _ " <a href="#" class="cancel-cachify-status hide-if-no-js button-cancel">%6$s</a>" & @CRLF & _ " </div>" & @CRLF & _ " </div>'," & @CRLF & _ " __('Remove', 'cachify')," & @CRLF & _ " $available_options[$current_action]," & @CRLF & _ " __('Edit')," & @CRLF & _ " $dropdown_options," & @CRLF & _ " __('OK')," & @CRLF & _ " __('Cancel')" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Einfügen der Optionsseite" & @CRLF & _ " *" & @CRLF & _ " * @since 1.0" & @CRLF & _ " * @change 2.0.2" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function add_page()" & @CRLF & _ " {" & @CRLF & _ " $page = add_options_page(" & @CRLF & _ " 'Cachify'," & @CRLF & _ " 'Cachify'," & @CRLF & _ " 'manage_options'," & @CRLF & _ " 'cachify'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'options_page'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Verfügbare Cache-Methoden" & @CRLF & _ " *" & @CRLF & _ " * @since 2.0.0" & @CRLF & _ " * @change 2.1.3" & @CRLF & _ " *" & @CRLF & _ " * @param array $methods Array mit verfügbaren Arten" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " private static function _method_select()" & @CRLF & _ " {" & @CRLF & _ " /* Defaults */" & @CRLF & _ " $methods = array(" & @CRLF & _ " self::METHOD_DB => __('Database', 'cachify')," & @CRLF & _ " self::METHOD_APC => 'APC'," & @CRLF & _ " self::METHOD_HDD => __('Hard disk', 'cachify')," & @CRLF & _ " self::METHOD_MMC => 'Memcached'" & @CRLF & _ " );" & @CRLF & _ "" & @CRLF & _ " /* APC */" & @CRLF & _ " if ( ! Cachify_APC::is_available() ) {" & @CRLF & _ " unset($methods[1]);" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Memcached? */" & @CRLF & _ " if ( ! Cachify_MEMCACHED::is_available() ) {" & @CRLF & _ " unset($methods[3]);" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* HDD */" & @CRLF & _ " if ( ! Cachify_HDD::is_available() ) {" & @CRLF & _ " unset($methods[2]);" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " return $methods;" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Minify cache dropdown" & @CRLF & _ " *" & @CRLF & _ " * @since 2.1.3" & @CRLF & _ " * @change 2.1.3" & @CRLF & _ " *" & @CRLF & _ " * @return array Key => value array" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " private static function _minify_select()" & @CRLF & _ " {" & @CRLF & _ " return array(" & @CRLF & _ " self::MINIFY_DISABLED => __('No minify', 'cachify')," & @CRLF & _ " self::MINIFY_HTML_ONLY => 'HTML'," & @CRLF & _ " self::MINIFY_HTML_JS => 'HTML + Inline JavaScript'" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Register the language file" & @CRLF & _ " *" & @CRLF & _ " * @since 2.1.3" & @CRLF & _ " * @change 2.1.3" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function register_textdomain()" & @CRLF & _ " {" & @CRLF & _ " load_plugin_textdomain(" & @CRLF & _ " 'cachify'," & @CRLF & _ " false," & @CRLF & _ " 'cachify/lang'" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Registrierung der Settings" & @CRLF & _ " *" & @CRLF & _ " * @since 1.0" & @CRLF & _ " * @change 1.0" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function register_settings()" & @CRLF & _ " {" & @CRLF & _ " register_setting(" & @CRLF & _ " 'cachify'," & @CRLF & _ " 'cachify'," & @CRLF & _ " array(" & @CRLF & _ " __CLASS__," & @CRLF & _ " 'validate_options'" & @CRLF & _ " )" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Valisierung der Optionsseite" & @CRLF & _ " *" & @CRLF & _ " * @since 1.0.0" & @CRLF & _ " * @change 2.1.3" & @CRLF & _ " *" & @CRLF & _ " * @param array $data Array mit Formularwerten" & @CRLF & _ " * @return array Array mit geprüften Werten" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function validate_options($data)" & @CRLF & _ " {" & @CRLF & _ " /* Cache leeren */" & @CRLF & _ " self::flush_total_cache();" & @CRLF & _ "" & @CRLF & _ " /* Hinweis */" & @CRLF & _ " if ( self::$options['use_apc'] != $data['use_apc'] && $data['use_apc'] >= self::METHOD_APC ) {" & @CRLF & _ " add_settings_error(" & @CRLF & _ " 'cachify_method_tip'," & @CRLF & _ " 'cachify_method_tip'," & @CRLF & _ " sprintf(" & @CRLF & _ " '%s [<a href="http://playground.ebiene.de/cachify-wordpress-cache/" target="_blank">?</a>]'," & @CRLF & _ " __('The server configuration file (e.g. .htaccess) needs to be adjusted', 'cachify')" & @CRLF & _ " )," & @CRLF & _ " 'updated'" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ " /* Rückgabe */" & @CRLF & _ " return array(" & @CRLF & _ " 'only_guests' => (int)(!empty($data['only_guests']))," & @CRLF & _ " 'compress_html' => (int)$data['compress_html']," & @CRLF & _ " 'cache_expires' => (int)(@$data['cache_expires'])," & @CRLF & _ " 'without_ids' => (string)sanitize_text_field(@$data['without_ids'])," & @CRLF & _ " 'without_agents' => (string)sanitize_text_field(@$data['without_agents'])," & @CRLF & _ " 'use_apc' => (int)$data['use_apc']," & @CRLF & _ " 'reset_on_comment' => (int)(!empty($data['reset_on_comment']))" & @CRLF & _ " );" & @CRLF & _ " }" & @CRLF & _ "" & @CRLF & _ "" & @CRLF & _ " /**" & @CRLF & _ " * Darstellung der Optionsseite" & @CRLF & _ " *" & @CRLF & _ " * @since 1.0" & @CRLF & _ " * @change 2.1.3" & @CRLF & _ " */" & @CRLF & _ "" & @CRLF & _ " public static function options_page()" & @CRLF & _ " { ?>" & @CRLF & _ " <style>" & @CRLF & _ " #cachify_settings input[type="text"]," & @CRLF & _ " #cachify_settings input[type="number"] {" & @CRLF & _ " height: 30px;" & @CRLF & _ " }" & @CRLF & _ " </style>" & @CRLF & _ "" & @CRLF & _ " <div class="wrap" id="cachify_settings">" & @CRLF & _ " <h2>" & @CRLF & _ " Cachify" & @CRLF & _ " </h2>" & @CRLF & _ "" & @CRLF & _ " <form method="post" action="options.php">" & @CRLF & _ " <?php settings_fields('cachify') ?>" & @CRLF & _ "" & @CRLF & _ " <?php $options = self::_get_options() ?>" & @CRLF & _ "" & @CRLF & _ " <table class="form-table">" & @CRLF & _ " <tr valign="top">" & @CRLF & _ " <th scope="row">" & @CRLF & _ " <?php _e('Cache method', 'cachify') ?>" & @CRLF & _ " </th>" & @CRLF & _ " <td>" & @CRLF & _ " <label for="cachify_cache_method">" & @CRLF & _ " <select name="cachify[use_apc]" id="cachify_cache_method">" & @CRLF & _ " <?php foreach( self::_method_select() as $k => $v ) { ?>" & @CRLF & _ " <option value="<?php echo esc_attr($k) ?>" <?php selected($options['use_apc'], $k); ?>><?php echo esc_html($v) ?></option>" & @CRLF & _ " <?php } ?>" & @CRLF & _ " </select>" & @CRLF & _ " </label>" & @CRLF & _ " </td>" & @CRLF & _ " </tr>" & @CRLF & _ "" & @CRLF & _ " <tr valign="top">" & @CRLF & _ " <th scope="row">" & @CRLF & _ " <?php _e('Cache validity', 'cachify') ?>" & @CRLF & _ " </th>" & @CRLF & _ " <td>" & @CRLF & _ " <label for="cachify_cache_expires">" & @CRLF & _ " <input type="number" min="0" step="1" name="cachify[cache_expires]" id="cachify_cache_expires" value="<?php echo $options['cache_expires'] ?>" class="small-text" />" & @CRLF & _ " <?php _e('Hours', 'cachify') ?>" & @CRLF & _ " </label>" & @CRLF & _ " </td>" & @CRLF & _ " </tr>" & @CRLF & _ "" & @CRLF & _ " <tr valign="top">" & @CRLF & _ " <th scope="row">" & @CRLF & _ " <?php _e('Cache generation', 'cachify') ?>" & @CRLF & _ " </th>" & @CRLF & _ " <td>" & @CRLF & _ " <fieldset>" & @CRLF & _ " <label for="cachify_only_guests">" & @CRLF & _ " <input type="checkbox" name="cachify[only_guests]" id="cachify_only_guests" value="1" <?php checked('1', $options['only_guests']); ?> />" & @CRLF & _ " <?php _e('No cache generation by logged in users', 'cachify') ?>" & @CRLF & _ " </label>" & @CRLF & _ "" & @CRLF & _ " <br />" & @CRLF & _ "" & @CRLF & _ " <label for="cachify_reset_on_comment">" & @CRLF & _ " <input type="checkbox" name="cachify[reset_on_comment]" id="cachify_reset_on_comment" value="1" <?php checked('1', $options['reset_on_comment']); ?> />" & @CRLF & _ " <?php _e('Flush the cache at new comments', 'cachify') ?>" & @CRLF & _ " </label>" & @CRLF & _ " </fieldset>" & @CRLF & _ " </td>" & @CRLF & _ " </tr>" & @CRLF & _ "" & @CRLF & _ " <tr valign="top">" & @CRLF & _ " <th scope="row">" & @CRLF & _ " <?php _e('Cache exceptions', 'cachify') ?>" & @CRLF & _ " </th>" & @CRLF & _ " <td>" & @CRLF & _ " <fieldset>" & @CRLF & _ " <label for="cachify_without_ids">" & @CRLF & _ " <input type="text" name="cachify[without_ids]" id="cachify_without_ids" value="<?php echo $options['without_ids'] ?>" />" & @CRLF & _ " Post/Pages-IDs" & @CRLF & _ " </label>" & @CRLF & _ "" & @CRLF & _ " <br />" & @CRLF & _ "" & @CRLF & _ " <label for="cachify_without_agents">" & @CRLF & _ " <input type="text" name="cachify[without_agents]" id="cachify_without_agents" value="<?php echo $options['without_agents'] ?>" />" & @CRLF & _ " Browser User-Agents" & @CRLF & _ " </label>" & @CRLF & _ " </fieldset>" & @CRLF & _ " </td>" & @CRLF & _ " </tr>" & @CRLF & _ "" & @CRLF & _ " <tr valign="top">" & @CRLF & _ " <th scope="row">" & @CRLF & _ " <?php _e('Cache minify', 'cachify') ?>" & @CRLF & _ " </th>" & @CRLF & _ " <td>" & @CRLF & _ " <label for="cachify_compress_html">" & @CRLF & _ " <select name="cachify[compress_html]" id="cachify_compress_html">" & @CRLF & _ " <?php foreach( self::_minify_select() as $k => $v ) { ?>" & @CRLF & _ " <option value="<?php echo esc_attr($k) ?>" <?php selected($options['compress_html'], $k); ?>>" & @CRLF & _ " <?php echo esc_html($v) ?>" & @CRLF & _ " </option>" & @CRLF & _ " <?php } ?>" & @CRLF & _ " </select>" & @CRLF & _ " </label>" & @CRLF & _ " </td>" & @CRLF & _ " </tr>" & @CRLF & _ "" & @CRLF & _ " <tr valign="top">" & @CRLF & _ " <th scope="row">" & @CRLF & _ " <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />" & @CRLF & _ " </th>" & @CRLF & _ " <td>" & @CRLF & _ " <a href="http://playground.ebiene.de/cachify-wordpress-cache/" target="_blank"><?php _e('Manual', 'cachify') ?></a> &bull; <a href="http://playground.ebiene.de/cachify-wordpress-cache/#book" target="_blank"><?php _e('Books', 'cachify') ?></a> &bull; <a href="https://flattr.com/t/1327625" target="_blank">Flattr</a> &bull; <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=5RDDW9FEHGLG6" target="_blank">PayPal</a>" & @CRLF & _ " </td>" & @CRLF & _ " </tr>" & @CRLF & _ " </table>" & @CRLF & _ " </form>" & @CRLF & _ " </div><?php" & @CRLF & _ " }" & @CRLF & _ "}" Local $aArray = StringRegExp($sString, $sRegex, $STR_REGEXPARRAYGLOBALFULLMATCH) Local $aFullArray[0] For $i = 0 To UBound($aArray) -1 _ArrayConcatenate($aFullArray, $aArray[$i]) Next $aArray = $aFullArray ; Present the entire match result _ArrayDisplay($aArray, "Result")

Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for AutoIt, please visit: https://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm