balanced.html

来自「perl教程」· HTML 代码 · 共 1,098 行 · 第 1/5 页

HTML
1,098
字号
<?xml version="1.0" ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<!-- saved from url=(0017)http://localhost/ -->
<script language="JavaScript" src="../../displayToc.js"></script>
<script language="JavaScript" src="../../tocParas.js"></script>
<script language="JavaScript" src="../../tocTab.js"></script>
<link rel="stylesheet" type="text/css" href="../../scineplex.css">
<title>Text::Balanced - Extract delimited text sequences from strings.</title>
<link rel="stylesheet" href="../../Active.css" type="text/css" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:" />
</head>

<body>

<script>writelinks('__top__',2);</script>
<h1><a>Text::Balanced - Extract delimited text sequences from strings.</a></h1>
<p><a name="__index__"></a></p>

<!-- INDEX BEGIN -->

<ul>

	<li><a href="#name">NAME</a></li>
	<li><a href="#synopsis">SYNOPSIS</a></li>
	<li><a href="#description">DESCRIPTION</a></li>
	<ul>

		<li><a href="#general_behaviour_in_list_contexts">General behaviour in list contexts</a></li>
		<li><a href="#general_behaviour_in_scalar_and_void_contexts">General behaviour in scalar and void contexts</a></li>
		<li><a href="#a_note_about_prefixes">A note about prefixes</a></li>
		<li><a href="#extract_delimited"><code>extract_delimited</code></a></li>
		<li><a href="#extract_bracketed"><code>extract_bracketed</code></a></li>
		<li><a href="#extract_variable"><code>extract_variable</code></a></li>
		<li><a href="#extract_tagged"><code>extract_tagged</code></a></li>
		<li><a href="#gen_extract_tagged"><code>gen_extract_tagged</code></a></li>
		<li><a href="#extract_quotelike"><code>extract_quotelike</code></a></li>
		<li><a href="#extract_quotelike_and_here_documents"><code>extract_quotelike</code> and &quot;here documents&quot;</a></li>
		<li><a href="#extract_codeblock"><code>extract_codeblock</code></a></li>
		<li><a href="#extract_multiple"><code>extract_multiple</code></a></li>
		<li><a href="#gen_delimited_pat"><code>gen_delimited_pat</code></a></li>
	</ul>

	<li><a href="#diagnostics">DIAGNOSTICS</a></li>
	<li><a href="#author">AUTHOR</a></li>
	<li><a href="#bugs_and_irritations">BUGS AND IRRITATIONS</a></li>
	<li><a href="#copyright">COPYRIGHT</a></li>
</ul>
<!-- INDEX END -->

<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>Text::Balanced - Extract delimited text sequences from strings.</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
 use Text::Balanced qw (
                        extract_delimited
                        extract_bracketed
                        extract_quotelike
                        extract_codeblock
                        extract_variable
                        extract_tagged
                        extract_multiple</pre>
<pre>
                        <span class="variable">gen_delimited_pat</span>
                        <span class="variable">gen_extract_tagged</span>
                                               <span class="operator">);</span>
</pre>
<pre>
 <span class="comment"># Extract the initial substring of $text that is delimited by</span>
 <span class="comment"># two (unescaped) instances of the first character in $delim.</span>
</pre>
<pre>
        <span class="operator">(</span><span class="variable">$extracted</span><span class="operator">,</span> <span class="variable">$remainder</span><span class="operator">)</span> <span class="operator">=</span> <span class="variable">extract_delimited</span><span class="operator">(</span><span class="variable">$text</span><span class="operator">,</span><span class="variable">$delim</span><span class="operator">);</span>
</pre>
<pre>
 <span class="comment"># Extract the initial substring of $text that is bracketed</span>
 <span class="comment"># with a delimiter(s) specified by $delim (where the string</span>
 <span class="comment"># in $delim contains one or more of '(){}[]&lt;&gt;').</span>
</pre>
<pre>
        <span class="operator">(</span><span class="variable">$extracted</span><span class="operator">,</span> <span class="variable">$remainder</span><span class="operator">)</span> <span class="operator">=</span> <span class="variable">extract_bracketed</span><span class="operator">(</span><span class="variable">$text</span><span class="operator">,</span><span class="variable">$delim</span><span class="operator">);</span>
</pre>
<pre>
 <span class="comment"># Extract the initial substring of $text that is bounded by</span>
 <span class="comment"># an XML tag.</span>
</pre>
<pre>
        <span class="operator">(</span><span class="variable">$extracted</span><span class="operator">,</span> <span class="variable">$remainder</span><span class="operator">)</span> <span class="operator">=</span> <span class="variable">extract_tagged</span><span class="operator">(</span><span class="variable">$text</span><span class="operator">);</span>
</pre>
<pre>
 <span class="comment"># Extract the initial substring of $text that is bounded by</span>
 <span class="comment"># a C&lt;BEGIN&gt;...C&lt;END&gt; pair. Don't allow nested C&lt;BEGIN&gt; tags</span>
</pre>
<pre>
        <span class="operator">(</span><span class="variable">$extracted</span><span class="operator">,</span> <span class="variable">$remainder</span><span class="operator">)</span> <span class="operator">=</span>
                <span class="variable">extract_tagged</span><span class="operator">(</span><span class="variable">$text</span><span class="operator">,</span><span class="string">"BEGIN"</span><span class="operator">,</span><span class="string">"END"</span><span class="operator">,</span><span class="keyword">undef</span><span class="operator">,</span><span class="operator">{</span><span class="string">bad</span><span class="operator">=&gt;</span><span class="operator">[</span><span class="string">"BEGIN"</span><span class="operator">]}</span><span class="operator">);</span>
</pre>
<pre>
 <span class="comment"># Extract the initial substring of $text that represents a</span>
 <span class="comment"># Perl "quote or quote-like operation"</span>
</pre>
<pre>
        <span class="operator">(</span><span class="variable">$extracted</span><span class="operator">,</span> <span class="variable">$remainder</span><span class="operator">)</span> <span class="operator">=</span> <span class="variable">extract_quotelike</span><span class="operator">(</span><span class="variable">$text</span><span class="operator">);</span>
</pre>
<pre>
 <span class="comment"># Extract the initial substring of $text that represents a block</span>
 <span class="comment"># of Perl code, bracketed by any of character(s) specified by $delim</span>
 <span class="comment"># (where the string $delim contains one or more of '(){}[]&lt;&gt;').</span>
</pre>
<pre>
        <span class="operator">(</span><span class="variable">$extracted</span><span class="operator">,</span> <span class="variable">$remainder</span><span class="operator">)</span> <span class="operator">=</span> <span class="variable">extract_codeblock</span><span class="operator">(</span><span class="variable">$text</span><span class="operator">,</span><span class="variable">$delim</span><span class="operator">);</span>
</pre>
<pre>
 <span class="comment"># Extract the initial substrings of $text that would be extracted by</span>
 <span class="comment"># one or more sequential applications of the specified functions</span>
 <span class="comment"># or regular expressions</span>
</pre>
<pre>
        <span class="variable">@extracted</span> <span class="operator">=</span> <span class="variable">extract_multiple</span><span class="operator">(</span><span class="variable">$text</span><span class="operator">,</span>
                                      <span class="operator">[</span> <span class="operator">\&amp;</span><span class="variable">extract_bracketed</span><span class="operator">,</span>
                                        <span class="operator">\&amp;</span><span class="variable">extract_quotelike</span><span class="operator">,</span>
                                        <span class="operator">\&amp;</span><span class="variable">some_other_extractor_sub</span><span class="operator">,</span>
                                        <span class="string">qr/[xyz]*/</span><span class="operator">,</span>
                                        <span class="string">'literal'</span><span class="operator">,</span>
                                      <span class="operator">]</span><span class="operator">);</span>
</pre>
<p># Create a string representing an optimized pattern (a la Friedl)
# that matches a substring delimited by any of the specified characters
# (in this case: any type of quote or a slash)</p>
<pre>
        <span class="variable">$patstring</span> <span class="operator">=</span> <span class="variable">gen_delimited_pat</span><span class="operator">(</span><span class="string">q{'"`/}</span><span class="operator">);</span>
</pre>
<p># Generate a reference to an anonymous sub that is just like extract_tagged
# but pre-compiled and optimized for a specific pair of tags, and consequently
# much faster (i.e. 3 times faster). It uses qr// for better performance on
# repeated calls, so it only works under Perl 5.005 or later.</p>
<pre>
        <span class="variable">$extract_head</span> <span class="operator">=</span> <span class="variable">gen_extract_tagged</span><span class="operator">(</span><span class="string">'&lt;HEAD&gt;'</span><span class="operator">,</span><span class="string">'&lt;/HEAD&gt;'</span><span class="operator">);</span>
</pre>
<pre>
        <span class="operator">(</span><span class="variable">$extracted</span><span class="operator">,</span> <span class="variable">$remainder</span><span class="operator">)</span> <span class="operator">=</span> <span class="variable">$extract_head</span><span class="operator">-&gt;(</span><span class="variable">$text</span><span class="operator">);</span>
</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>The various <code>extract_...</code> subroutines may be used to
extract a delimited substring, possibly after skipping a
specified prefix string. By default, that prefix is
optional whitespace (<code>/\s*/</code>), but you can change it to whatever
you wish (see below).</p>
<p>The substring to be extracted must appear at the
current <a href="../../lib/Pod/perlfunc.html#item_pos"><code>pos</code></a> location of the string's variable
(or at index zero, if no <a href="../../lib/Pod/perlfunc.html#item_pos"><code>pos</code></a> position is defined).
In other words, the <code>extract_...</code> subroutines <em>don't</em>
extract the first occurance of a substring anywhere
in a string (like an unanchored regex would). Rather,
they extract an occurance of the substring appearing
immediately at the current matching position in the
string (like a <code>\G</code>-anchored regex would).</p>
<p>
</p>
<h2><a name="general_behaviour_in_list_contexts">General behaviour in list contexts</a></h2>
<p>In a list context, all the subroutines return a list, the first three
elements of which are always:</p>
<dl>
<dt><strong><a name="item__5b0_5d">[0]</a></strong>

<dd>
<p>The extracted string, including the specified delimiters.
If the extraction fails an empty string is returned.</p>
</dd>
</li>
<dt><strong><a name="item__5b1_5d">[1]</a></strong>

<dd>
<p>The remainder of the input string (i.e. the characters after the
extracted string). On failure, the entire string is returned.</p>
</dd>
</li>
<dt><strong><a name="item__5b2_5d">[2]</a></strong>

<dd>
<p>The skipped prefix (i.e. the characters before the extracted string).
On failure, the empty string is returned.</p>
</dd>
</li>
</dl>
<p>Note that in a list context, the contents of the original input text (the first
argument) are not modified in any way.</p>
<p>However, if the input text was passed in a variable, that variable's
<a href="../../lib/Pod/perlfunc.html#item_pos"><code>pos</code></a> value is updated to point at the first character after the
extracted text. That means that in a list context the various
subroutines can be used much like regular expressions. For example:</p>
<pre>
        <span class="keyword">while</span> <span class="operator">(</span> <span class="variable">$next</span> <span class="operator">=</span> <span class="operator">(</span><span class="variable">extract_quotelike</span><span class="operator">(</span><span class="variable">$text</span><span class="operator">))</span><span class="operator">[</span><span class="number">0</span><span class="operator">]</span> <span class="operator">)</span>
        <span class="operator">{</span>
                <span class="comment"># process next quote-like (in $next)</span>
        <span class="operator">}</span>
</pre>
<p>
</p>
<h2><a name="general_behaviour_in_scalar_and_void_contexts">General behaviour in scalar and void contexts</a></h2>
<p>In a scalar context, the extracted string is returned, having first been
removed from the input text. Thus, the following code also processes
each quote-like operation, but actually removes them from $text:</p>
<pre>
        <span class="keyword">while</span> <span class="operator">(</span> <span class="variable">$next</span> <span class="operator">=</span> <span class="variable">extract_quotelike</span><span class="operator">(</span><span class="variable">$text</span><span class="operator">)</span> <span class="operator">)</span>
        <span class="operator">{</span>
                <span class="comment"># process next quote-like (in $next)</span>
        <span class="operator">}</span>
</pre>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?