import Foundation
// WARNING: You included a flag that Swift doesn't support: U
//          When this flag is set, it inverts the "greediness" of the quantifiers so that they are not greedy by default, but become greedy if followed by '?'.
//          As an alternative, this effect can also be achieved by setting a (?U) modifier setting within the pattern or by a question mark behind a quantifier (e.g. .*?).
let pattern = #"<xf:tokeninputrow.*\/>"#
let regex = try! NSRegularExpression(pattern: pattern, options: .dotMatchesLineSeparators)
let testString = #"""
<xf:title>{{ phrase('start_conversation') }}</xf:title>
<xf:breadcrumb href="{{ link('conversations') }}">{{ phrase('conversations') }}</xf:breadcrumb>
<xf:if contentcheck="true">
	<div class="blockMessage blockMessage--error blockMessage--iconic">
		<xf:contentcheck>
			<xf:if is="$errorUsernames is not empty">
				<div>{{ phrase('you_can_not_start_conversation_with_following_users_because_of_privacy', {'usernames': $errorUsernames|join(', ')}) }}</div>
			</xf:if>
			<xf:if is="$notFoundUsernames is not empty">
				<div>{{ phrase('following_users_not_found_x', {'usernames': $notFoundUsernames|join(', ')}) }}</div>
			</xf:if>
			<xf:if is="$recipientLimit">
				<div>{{ phrase('you_have_exceeded_allowed_number_of_recipients_x_for', {'limit': $recipientLimit}) }}</div>
			</xf:if>
		</xf:contentcheck>
	</div>
</xf:if>
<xf:form action="{{ link('conversations/add') }}" ajax="true" draft="{{ link('conversations/draft') }}" data-preview-url="{{ link('conversations/add-preview') }}" class="block" data-xf-init="attachment-manager">
	<div class="block-container">
		<div class="block-body">
			<xf:tokeninputrow name="recipients" value="{$to}" href="{{ link('members/find') }}"
                rowtype="fullWidth"
                label="{{ phrase('recipients') }}"
                explain="{{ phrase('separate_names_with_comma') }}" />
			<xf:textboxrow name="title" value="{$title}" rowtype="fullWidth noLabel" class="input--title"
				maxlength="{{ max_length('XF:ConversationMaster', 'title') }}"
				placeholder="{{ phrase('title...') }}"
				label="{{ phrase('title') }}" />
			<xf:editorrow name="message"
				value="{$message}"
				attachments="{{ $attachmentData ? $attachmentData.attachments : [] }}"
				rowtype="fullWidth noLabel mergePrev" />
			<xf:formrow>
				<xf:if is="$attachmentData">
					<xf:macro template="helper_attach_upload" name="upload_block"
						arg-attachmentData="{$attachmentData}"
						arg-forceHash="{$draft.attachment_hash}" />
				</xf:if>
				<xf:if is="$xf.options.multiQuote">
					<xf:macro template="multi_quote_macros" name="button"
						arg-href="{{ link('conversations/multi-quote', $conversation) }}"
						arg-messageSelector=".js-message"
						arg-storageKey="multiQuoteConversation" />
				</xf:if>
				<xf:button class="button--link u-jsOnly" data-xf-click="preview-click" icon="preview" />
			</xf:formrow>
			<xf:checkboxrow>
				<xf:option name="open_invite" checked="{{ ($draft.open_invite OR $conversation.open_invite) ? 'checked' : '' }}">
					{{ phrase('allow_anyone_in_conversation_to_invite_others') }}
				</xf:option>
				<xf:option name="conversation_locked" checked="{{ ($draft.conversation_open OR $conversation.conversation_open) ? '' : 'checked' }}">
					{{ phrase('lock_conversation_no_responses_will_be_allowed') }}
				</xf:option>
			</xf:checkboxrow>
		</div>
		<xf:submitrow submit="{{ phrase('start_conversation') }}" sticky="true" icon="conversation">
			<xf:html>
				<xf:button class="u-jsOnly" data-xf-click="preview-click" icon="preview" />
			</xf:html>
		</xf:submitrow>
	</div>
</xf:form>
"""#
let stringRange = NSRange(location: 0, length: testString.utf16.count)
if let firstMatch = regex.firstMatch(in: testString, range: stringRange) {
    let result: [String] = (1 ..< firstMatch.numberOfRanges).map { (testString as NSString).substring(with: firstMatch.range(at: $0)) }
    print(result)
} else {
    print("No matches were found.")
}
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