import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "[\\r\\n]+\\s*\\/\\/.*TODO:+.*";
final String string = "angular\n"
+ " .module('mdKeyboard', ['material.components.bottomSheet'])\n"
+ " .directive('mdKeyboard', MdKeyboardDirective)\n"
+ " .provider('$mdKeyboard', MdKeyboardProvider);\n\n\n"
+ "function MdKeyboardDirective($mdKeyboard, $mdBottomSheet, $timeout, $injector, $log) {\n"
+ " return {\n"
+ " restrict: 'A',\n"
+ " require: '?ngModel',\n"
+ " scope: {\n"
+ " clickOutsideToClose: '=',\n"
+ " preserveScope: '=',\n"
+ " showInMobile: '='\n"
+ " },\n"
+ " link: function (scope, element, attrs, ngModelCtrl) {\n"
+ " if (!ngModelCtrl) {\n"
+ " return;\n"
+ " }\n\n"
+ " var bottomSheet;\n\n"
+ " // Don't show virtual keyboard in mobile devices (default)\n"
+ " //TODO: test detection and reimplement if neccessary\n"
+ " //TODO: dissolve dependency to UAParser if possible / use angular or material utils\n"
+ " if ($injector.has('UAParser')) {\n"
+ " var UAParser = $injector.get('UAParser');\n"
+ " var results = new UAParser().getResult();\n"
+ " var isMobile = results.device.type === 'mobile' || results.device.type === 'tablet';\n"
+ " isMobile = isMobile || (results.os && (results.os.name === 'Android'));\n"
+ " isMobile = isMobile || (results.os && (results.os.name === 'iOS'));\n"
+ " isMobile = isMobile || (results.os && (results.os.name === 'Windows Phone'));\n"
+ " isMobile = isMobile || (results.os && (results.os.name === 'Windows Mobile'));\n"
+ " if (isMobile && attrs.showInMobile !== true) {\n"
+ " return;\n"
+ " }\n"
+ " }\n\n"
+ " /*\n"
+ " ngVirtualKeyboardService.attach(elements[0], scope.config, function() {\n"
+ " $timeout(function() {\n"
+ " ngModelCtrl.$setViewValue(elements[0].value);\n"
+ " });\n"
+ " });\n"
+ " */\n\n"
+ " $log.debug(attrs);\n"
+ " element\n"
+ " .bind('focus', showKeyboard)\n"
+ " .bind('blur', hideKeyboard);\n\n"
+ " function showKeyboard() {\n"
+ " $log.info('showKeyboard');\n"
+ " bottomSheet = $mdBottomSheet\n"
+ " .show({\n"
+ " template: '<md-bottom-sheet class=\"md-grid\" layout=\"column\" ng-cloak>{{keyboard}}</md-bottom-sheet>',\n"
+ " controller: KeyboardController,\n"
+ " clickOutsideToClose: attrs.clickOutsideToClose || false,\n"
+ " preserveScope: attrs.preserveScope || true\n"
+ " })\n"
+ " .then(function () {\n\n"
+ " });\n"
+ " }\n\n"
+ " function hideKeyboard() {\n"
+ " $log.info('hideKeyboard');\n"
+ " if (bottomSheet) {\n"
+ " $mdBottomSheet.hide();\n"
+ " delete bottomSheet;\n"
+ " }\n"
+ " }\n\n"
+ " function KeyboardController($scope, $mdBottomSheet) {\n"
+ " $scope.keyboard = 'TEST';\n"
+ " }\n\n"
+ " // open bottomsheet with keyboard on focus TODO: and without backdrop\n"
+ " scope.keyboard = 'test';\n\n"
+ " // When navigation force destroys an interimElement, then\n"
+ " // listen and $destroy() that interim instance...\n"
+ " scope.$on('$destroy', function () {\n"
+ " $mdKeyboard.destroy();\n"
+ " });\n"
+ " }\n"
+ " };\n"
+ "}\n\n"
+ "function MdKeyboardProvider($$interimElementProvider) {\n"
+ " return $$interimElementProvider('$mdKeyboard')\n"
+ " .setDefaults({\n"
+ " options: keyboardDefaults\n"
+ " });\n\n"
+ " function keyboardDefaults() {\n"
+ " return {\n"
+ " themable: true,\n"
+ " layout: defaultLayout\n"
+ " };\n\n"
+ " function defaultLayout() {\n"
+ " // get default language\n"
+ " return 'en-us';\n"
+ " }\n"
+ " }\n"
+ "}\n";
final Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
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 Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html