$re = '/<xf:tokeninputrow.*\/>/sU';
$str = '<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>';
preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);
// Print the entire match result
var_dump($matches);
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 PHP, please visit: http://php.net/manual/en/ref.pcre.php