import Foundation
let pattern = ##"^(?P<disabled># *)?(?P<min>\*/\d+|\*|(?:\d+,?)+)(?: )(?P<hour>\*/\d+|\*|(?:\d+,?)+)(?: )(?P<day>\*/\d+|\*|(?:\d+,?)+)(?: )(?P<month>\*/\d+|\*|(?:\d+,?)+)(?: )(?P<dayofweek>\*/\d+|\*|(?:\d+,?)+)"##
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = ##"""
PATH=/home/minecraft/.virtualenvs/charfred/bin:/usr/local/bin:/bin:/usr/bin:/home/minecraft/bin:/usr/local/sbin:/usr/sbin
# Don't touch the above, pretty please!
# =====================================================================
# === These are my jobs, they may not be pretty, but they are mine. ===
# =====================================================================
#
# This first one is an example job for the replacement to STC_Control:
#
# */5 * * * * spiffy status Revelation >> /home/minecraft/logs/test.log 2>&1
#
# =====================================================================
# Variables here! Less typing, more lazy!:
# Paths to log directories:
ETERNALLOGS=/home/minecraft/logs/Eternal
ETERNALVIPLOGS=/home/minecraft/logs/EternalVIP
REVELATIONLOGS=/home/minecraft/logs/Revelation
ENIGMATICALOGS=/home/minecraft/logs/Enigmatica
BUNGEELOGS=/home/minecraft/logs/Bungee
BACKUPLOGS=/home/minecraft/logs/Backups
CHARFREDLOGS=/home/minecraft/logs/Charfred_III
PO3LOGS=/home/minecraft/logs/PO3
DDSSLOGS=/home/minecraft/logs/DDSS
BURIEDLOGS=/home/minecraft/logs/Buried
DIREWOLF147LOGS=/home/minecraft/logs/Direwolf147
TFCRLOGS=/home/minecraft/logs/TFCR
# ================
# Real jobs below:
# == ~~~~~~~~~~ ==
# -~- Start Servers on Reboot -~-
@reboot spiffy start Eternal >> $ETERNALLOGS/startup.log 2>&1
@reboot spiffy start EternalVIP >> $ETERNALVIPLOGS/startup.log 2>&1
@reboot spiffy start Revelation >> $REVELATIONLOGS/startup.log 2>&1
@reboot spiffy start Enigmatica >> $ENIGMATICALOGS/startup.log 2>&1
@reboot spiffy start PO3 >> $PO3LOGS/startup.log 2>&1
@reboot spiffy start DDSS >> $DDSSLOGS/startup.log 2>&1
# @reboot spiffy start Buried >> $BURIEDLOGS/startup.log 2>&1
# @reboot spiffy start Direwolf147 >> $DIREWOLF147/startup.log 2>&1
# -~- Server Online Keeper -~-
*/15 * * * * spiffy start Eternal >> $ETERNALLOGS/failsafe.log 2>&1
*/15 * * * * spiffy start EternalVIP >> $ETERNALVIPLOGS/failsafe.log 2>&1
*/15 * * * * spiffy start Revelation >> $REVELATIONLOGS/failsafe.log 2>&1
*/15 * * * * spiffy start Enigmatica >> $ENIGMATICALOGS/failsafe.log 2>&1
# */15 * * * * spiffy start PO3 >> $PO3LOGS/failsafe.log 2>&1
*/15 * * * * spiffy start DDSS >> $DDSSLOGS/failsafe.log 2>&1
# */15 * * * * spiffy start Buried >> $BURIEDLOGS/failsafe.log 2>&1
# */15 * * * * spiffy start Direwolf147 >> $DIREWOLF147LOGS/failsafe.log 2>&1
# -~- Scheduled Restarts -~-
0 7,19 * * * spiffy restart Revelation 10m >> $REVELATIONLOGS/restarts.log 2>&1
0 8,14,20,2 * * * spiffy restart Enigmatica 10m >> $ENIGMATICALOGS/restarts.log 2>&1
0 5,9,13,17,21,1 * * * spiffy restart DDSS 10m >> $DDSSLOGS/restarts.log 2>&1
30 2,8,14,20 * * * spiffy restart PO3 10m >> $PO3LOGS/restarts.log 2>&1
30 5,9,13,17,21,1 * * * spiffy restart Eternal 10m >> $ETERNALLOGS/restarts.log 2>&1
30 3,11,19 * * * spiffy restart EternalVIP 10m >> $ETERNALVIPLOGS/restarts.log 2>&1
# -~- World Backups -~-
# ===== Info =====
# Each backup takes about 4 minutes on the larger worlds and taxes one CPU core to 100%;
# If multiple servers are specified in the same command, they'll be done sequentially,
# meaning that backing up 4 servers in one command will take about 16min total.
# === End Info ===
0,10,20,30 0,4,8,12,16,20 * * * spiffy backup PO3 >> $BACKUPLOGS/po3.log 2>&1
30 0,4,8,12,16,20 * * * spiffy backup DDSS >> $BACKUPLOGS/DDSS.log 2>&1
# 0 1,5,9,13,17,21 * * * spiffy backup Direwolf147 >> $BACKUPLOGS/Direwolf147.log 2>&1
30 1,5,9,13,17,21 * * *spiffy backup Revelation >> $REVELATIONLOGS/Revelation.log 2>&1
# 0 2,6,10,14,18,22 * * * spiffy backup Buried >> $BACKUPLOGS/buried.log 2>&1
30 2,6,10,14,18,22 * * * spiffy backup Enigmatica >> $BACKUPLOGS/enigmatica.log 2>&1
0 3,7,11,15,19,23 * * * spiffy backup Eternal >> $BACKUPLOGS/eternal.log 2>&1
15 1,5,9,13,17,21 * * * spiffy backup EternalVIP >> $BACKUPLOGS/eternalvip.log 2>&1
# -~- Quest Backups -~-
*/15 * * * * spiffy questbackup DDSS >> $BACKUPLOGS/quests.log 2>&1
*/15 * * * * spiffy questbackup PO3 >> $BACKUPLOGS/quests.log 2>&1
*/15 * * * * spiffy questbackup Enigmatica >> $BACKUPLOGS/quests.log 2>&1
*/15 * * * * spiffy questbackup Eternal >> $BACKUPLOGS/quests.log 2>&1
*/15 * * * * spiffy questbackup EternalVIP >> $BACKUPLOGS/quests.log 2>&1
# -~- Charfred_III related Jobs -~-
@reboot /home/minecraft/charloader.zsh
# -~- inotify watcher for betterquesting -~-
# @reboot screen -h 100 -dmS charredobserverI /home/minecraft/directorywatchforjinspleasure.zsh
"""##
let stringRange = NSRange(location: 0, length: testString.utf16.count)
let matches = regex.matches(in: testString, range: stringRange)
var result: [[String]] = []
for match in matches {
var groups: [String] = []
for rangeIndex in 1 ..< match.numberOfRanges {
let nsRange = match.range(at: rangeIndex)
guard !NSEqualRanges(nsRange, NSMakeRange(NSNotFound, 0)) else { continue }
let string = (testString as NSString).substring(with: nsRange)
groups.append(string)
}
if !groups.isEmpty {
result.append(groups)
}
}
print(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 Swift 5.2, please visit: https://developer.apple.com/documentation/foundation/nsregularexpression