30f734afcfe0925bd2eb926a3d762ffeb6f4c1d2
[platform/upstream/glib2.0.git] / docs / reference / glib / html / glib-Glob-style-pattern-matching.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2 <html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5 <title>Glob-style pattern matching</title>
6 <meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
7 <link rel="home" href="index.html" title="GLib Reference Manual">
8 <link rel="up" href="glib-utilities.html" title="GLib Utilities">
9 <link rel="prev" href="glib-Commandline-option-parser.html" title="Commandline option parser">
10 <link rel="next" href="glib-Perl-compatible-regular-expressions.html" title="Perl-compatible regular expressions">
11 <meta name="generator" content="GTK-Doc V1.18 (XML mode)">
12 <link rel="stylesheet" href="style.css" type="text/css">
13 </head>
14 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
15 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
16 <tr valign="middle">
17 <td><a accesskey="p" href="glib-Commandline-option-parser.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
18 <td><a accesskey="u" href="glib-utilities.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
19 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
20 <th width="100%" align="center">GLib Reference Manual</th>
21 <td><a accesskey="n" href="glib-Perl-compatible-regular-expressions.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
22 </tr>
23 <tr><td colspan="5" class="shortcuts">
24 <a href="#glib-Glob-style-pattern-matching.synopsis" class="shortcut">Top</a>
25                    | 
26                   <a href="#glib-Glob-style-pattern-matching.description" class="shortcut">Description</a>
27 </td></tr>
28 </table>
29 <div class="refentry">
30 <a name="glib-Glob-style-pattern-matching"></a><div class="titlepage"></div>
31 <div class="refnamediv"><table width="100%"><tr>
32 <td valign="top">
33 <h2><span class="refentrytitle"><a name="glib-Glob-style-pattern-matching.top_of_page"></a>Glob-style pattern matching</span></h2>
34 <p>Glob-style pattern matching — matches strings against patterns containing '*'
35                     (wildcard) and '?' (joker)</p>
36 </td>
37 <td valign="top" align="right"></td>
38 </tr></table></div>
39 <div class="refsynopsisdiv">
40 <a name="glib-Glob-style-pattern-matching.synopsis"></a><h2>Synopsis</h2>
41 <pre class="synopsis">
42 #include &lt;glib.h&gt;
43
44                     <a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec">GPatternSpec</a>;
45 <a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="returnvalue">GPatternSpec</span></a> *      <a class="link" href="glib-Glob-style-pattern-matching.html#g-pattern-spec-new" title="g_pattern_spec_new ()">g_pattern_spec_new</a>                  (<em class="parameter"><code>const <a class="link" href="glib-Basic-Types.html#gchar" title="gchar"><span class="type">gchar</span></a> *pattern</code></em>);
46 <span class="returnvalue">void</span>                <a class="link" href="glib-Glob-style-pattern-matching.html#g-pattern-spec-free" title="g_pattern_spec_free ()">g_pattern_spec_free</a>                 (<em class="parameter"><code><a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="type">GPatternSpec</span></a> *pspec</code></em>);
47 <a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="glib-Glob-style-pattern-matching.html#g-pattern-spec-equal" title="g_pattern_spec_equal ()">g_pattern_spec_equal</a>                (<em class="parameter"><code><a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="type">GPatternSpec</span></a> *pspec1</code></em>,
48                                                          <em class="parameter"><code><a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="type">GPatternSpec</span></a> *pspec2</code></em>);
49 <a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="glib-Glob-style-pattern-matching.html#g-pattern-match" title="g_pattern_match ()">g_pattern_match</a>                     (<em class="parameter"><code><a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="type">GPatternSpec</span></a> *pspec</code></em>,
50                                                          <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#guint" title="guint"><span class="type">guint</span></a> string_length</code></em>,
51                                                          <em class="parameter"><code>const <a class="link" href="glib-Basic-Types.html#gchar" title="gchar"><span class="type">gchar</span></a> *string</code></em>,
52                                                          <em class="parameter"><code>const <a class="link" href="glib-Basic-Types.html#gchar" title="gchar"><span class="type">gchar</span></a> *string_reversed</code></em>);
53 <a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="glib-Glob-style-pattern-matching.html#g-pattern-match-string" title="g_pattern_match_string ()">g_pattern_match_string</a>              (<em class="parameter"><code><a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="type">GPatternSpec</span></a> *pspec</code></em>,
54                                                          <em class="parameter"><code>const <a class="link" href="glib-Basic-Types.html#gchar" title="gchar"><span class="type">gchar</span></a> *string</code></em>);
55 <a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="glib-Glob-style-pattern-matching.html#g-pattern-match-simple" title="g_pattern_match_simple ()">g_pattern_match_simple</a>              (<em class="parameter"><code>const <a class="link" href="glib-Basic-Types.html#gchar" title="gchar"><span class="type">gchar</span></a> *pattern</code></em>,
56                                                          <em class="parameter"><code>const <a class="link" href="glib-Basic-Types.html#gchar" title="gchar"><span class="type">gchar</span></a> *string</code></em>);
57 </pre>
58 </div>
59 <div class="refsect1">
60 <a name="glib-Glob-style-pattern-matching.description"></a><h2>Description</h2>
61 <p>
62 The <code class="function">g_pattern_match*</code> functions match a string
63 against a pattern containing '*' and '?' wildcards with similar
64 semantics as the standard <code class="function">glob()</code> function: '*' matches an arbitrary,
65 possibly empty, string, '?' matches an arbitrary character.
66 </p>
67 <p>
68 Note that in contrast to <code class="function">glob()</code>, the '/' character
69 <span class="emphasis"><em>can</em></span> be matched by the wildcards, there are no
70 '[...]' character ranges and '*' and '?' can
71 <span class="emphasis"><em>not</em></span> be escaped to include them literally in a
72 pattern.
73 </p>
74 <p>
75 When multiple strings must be matched against the same pattern, it
76 is better to compile the pattern to a <a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="type">GPatternSpec</span></a> using
77 <a class="link" href="glib-Glob-style-pattern-matching.html#g-pattern-spec-new" title="g_pattern_spec_new ()"><code class="function">g_pattern_spec_new()</code></a> and use <a class="link" href="glib-Glob-style-pattern-matching.html#g-pattern-match-string" title="g_pattern_match_string ()"><code class="function">g_pattern_match_string()</code></a> instead of
78 <a class="link" href="glib-Glob-style-pattern-matching.html#g-pattern-match-simple" title="g_pattern_match_simple ()"><code class="function">g_pattern_match_simple()</code></a>. This avoids the overhead of repeated
79 pattern compilation.
80 </p>
81 </div>
82 <div class="refsect1">
83 <a name="glib-Glob-style-pattern-matching.details"></a><h2>Details</h2>
84 <div class="refsect2">
85 <a name="GPatternSpec"></a><h3>GPatternSpec</h3>
86 <pre class="programlisting">typedef struct _GPatternSpec GPatternSpec;</pre>
87 <p>
88 A <span class="structname">GPatternSpec</span> is the 'compiled' form of a
89 pattern. This structure is opaque and its fields cannot be accessed
90 directly.
91 </p>
92 </div>
93 <hr>
94 <div class="refsect2">
95 <a name="g-pattern-spec-new"></a><h3>g_pattern_spec_new ()</h3>
96 <pre class="programlisting"><a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="returnvalue">GPatternSpec</span></a> *      g_pattern_spec_new                  (<em class="parameter"><code>const <a class="link" href="glib-Basic-Types.html#gchar" title="gchar"><span class="type">gchar</span></a> *pattern</code></em>);</pre>
97 <p>
98 Compiles a pattern to a <a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="type">GPatternSpec</span></a>.
99 </p>
100 <div class="variablelist"><table border="0">
101 <col align="left" valign="top">
102 <tbody>
103 <tr>
104 <td><p><span class="term"><em class="parameter"><code>pattern</code></em> :</span></p></td>
105 <td>a zero-terminated UTF-8 encoded string</td>
106 </tr>
107 <tr>
108 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
109 <td>a newly-allocated <a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="type">GPatternSpec</span></a>
110 </td>
111 </tr>
112 </tbody>
113 </table></div>
114 </div>
115 <hr>
116 <div class="refsect2">
117 <a name="g-pattern-spec-free"></a><h3>g_pattern_spec_free ()</h3>
118 <pre class="programlisting"><span class="returnvalue">void</span>                g_pattern_spec_free                 (<em class="parameter"><code><a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="type">GPatternSpec</span></a> *pspec</code></em>);</pre>
119 <p>
120 Frees the memory allocated for the <a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="type">GPatternSpec</span></a>.
121 </p>
122 <div class="variablelist"><table border="0">
123 <col align="left" valign="top">
124 <tbody><tr>
125 <td><p><span class="term"><em class="parameter"><code>pspec</code></em> :</span></p></td>
126 <td>a <a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="type">GPatternSpec</span></a>
127 </td>
128 </tr></tbody>
129 </table></div>
130 </div>
131 <hr>
132 <div class="refsect2">
133 <a name="g-pattern-spec-equal"></a><h3>g_pattern_spec_equal ()</h3>
134 <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a>            g_pattern_spec_equal                (<em class="parameter"><code><a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="type">GPatternSpec</span></a> *pspec1</code></em>,
135                                                          <em class="parameter"><code><a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="type">GPatternSpec</span></a> *pspec2</code></em>);</pre>
136 <p>
137 Compares two compiled pattern specs and returns whether they will
138 match the same set of strings.
139 </p>
140 <div class="variablelist"><table border="0">
141 <col align="left" valign="top">
142 <tbody>
143 <tr>
144 <td><p><span class="term"><em class="parameter"><code>pspec1</code></em> :</span></p></td>
145 <td>a <a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="type">GPatternSpec</span></a>
146 </td>
147 </tr>
148 <tr>
149 <td><p><span class="term"><em class="parameter"><code>pspec2</code></em> :</span></p></td>
150 <td>another <a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="type">GPatternSpec</span></a>
151 </td>
152 </tr>
153 <tr>
154 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
155 <td>Whether the compiled patterns are equal</td>
156 </tr>
157 </tbody>
158 </table></div>
159 </div>
160 <hr>
161 <div class="refsect2">
162 <a name="g-pattern-match"></a><h3>g_pattern_match ()</h3>
163 <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a>            g_pattern_match                     (<em class="parameter"><code><a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="type">GPatternSpec</span></a> *pspec</code></em>,
164                                                          <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#guint" title="guint"><span class="type">guint</span></a> string_length</code></em>,
165                                                          <em class="parameter"><code>const <a class="link" href="glib-Basic-Types.html#gchar" title="gchar"><span class="type">gchar</span></a> *string</code></em>,
166                                                          <em class="parameter"><code>const <a class="link" href="glib-Basic-Types.html#gchar" title="gchar"><span class="type">gchar</span></a> *string_reversed</code></em>);</pre>
167 <p>
168 Matches a string against a compiled pattern. Passing the correct
169 length of the string given is mandatory. The reversed string can be
170 omitted by passing <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a>, this is more efficient if the reversed
171 version of the string to be matched is not at hand, as
172 <a class="link" href="glib-Glob-style-pattern-matching.html#g-pattern-match" title="g_pattern_match ()"><code class="function">g_pattern_match()</code></a> will only construct it if the compiled pattern
173 requires reverse matches.
174 </p>
175 <p>
176 Note that, if the user code will (possibly) match a string against a
177 multitude of patterns containing wildcards, chances are high that
178 some patterns will require a reversed string. In this case, it's
179 more efficient to provide the reversed string to avoid multiple
180 constructions thereof in the various calls to <a class="link" href="glib-Glob-style-pattern-matching.html#g-pattern-match" title="g_pattern_match ()"><code class="function">g_pattern_match()</code></a>.
181 </p>
182 <p>
183 Note also that the reverse of a UTF-8 encoded string can in general
184 <span class="emphasis"><em>not</em></span> be obtained by <a class="link" href="glib-String-Utility-Functions.html#g-strreverse" title="g_strreverse ()"><code class="function">g_strreverse()</code></a>. This works
185 only if the string doesn't contain any multibyte characters. GLib
186 offers the <a class="link" href="glib-Unicode-Manipulation.html#g-utf8-strreverse" title="g_utf8_strreverse ()"><code class="function">g_utf8_strreverse()</code></a> function to reverse UTF-8 encoded
187 strings.
188 </p>
189 <div class="variablelist"><table border="0">
190 <col align="left" valign="top">
191 <tbody>
192 <tr>
193 <td><p><span class="term"><em class="parameter"><code>pspec</code></em> :</span></p></td>
194 <td>a <a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="type">GPatternSpec</span></a>
195 </td>
196 </tr>
197 <tr>
198 <td><p><span class="term"><em class="parameter"><code>string_length</code></em> :</span></p></td>
199 <td>the length of <em class="parameter"><code>string</code></em> (in bytes, i.e. <code class="function">strlen()</code>,
200 <span class="emphasis"><em>not</em></span> <a class="link" href="glib-Unicode-Manipulation.html#g-utf8-strlen" title="g_utf8_strlen ()"><code class="function">g_utf8_strlen()</code></a>)</td>
201 </tr>
202 <tr>
203 <td><p><span class="term"><em class="parameter"><code>string</code></em> :</span></p></td>
204 <td>the UTF-8 encoded string to match</td>
205 </tr>
206 <tr>
207 <td><p><span class="term"><em class="parameter"><code>string_reversed</code></em> :</span></p></td>
208 <td>the reverse of <em class="parameter"><code>string</code></em> or <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
209 </td>
210 </tr>
211 <tr>
212 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
213 <td>
214 <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a> if <em class="parameter"><code>string</code></em> matches <em class="parameter"><code>pspec</code></em>
215 </td>
216 </tr>
217 </tbody>
218 </table></div>
219 </div>
220 <hr>
221 <div class="refsect2">
222 <a name="g-pattern-match-string"></a><h3>g_pattern_match_string ()</h3>
223 <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a>            g_pattern_match_string              (<em class="parameter"><code><a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="type">GPatternSpec</span></a> *pspec</code></em>,
224                                                          <em class="parameter"><code>const <a class="link" href="glib-Basic-Types.html#gchar" title="gchar"><span class="type">gchar</span></a> *string</code></em>);</pre>
225 <p>
226 Matches a string against a compiled pattern. If the string is to be
227 matched against more than one pattern, consider using
228 <a class="link" href="glib-Glob-style-pattern-matching.html#g-pattern-match" title="g_pattern_match ()"><code class="function">g_pattern_match()</code></a> instead while supplying the reversed string.
229 </p>
230 <div class="variablelist"><table border="0">
231 <col align="left" valign="top">
232 <tbody>
233 <tr>
234 <td><p><span class="term"><em class="parameter"><code>pspec</code></em> :</span></p></td>
235 <td>a <a class="link" href="glib-Glob-style-pattern-matching.html#GPatternSpec" title="GPatternSpec"><span class="type">GPatternSpec</span></a>
236 </td>
237 </tr>
238 <tr>
239 <td><p><span class="term"><em class="parameter"><code>string</code></em> :</span></p></td>
240 <td>the UTF-8 encoded string to match</td>
241 </tr>
242 <tr>
243 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
244 <td>
245 <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a> if <em class="parameter"><code>string</code></em> matches <em class="parameter"><code>pspec</code></em>
246 </td>
247 </tr>
248 </tbody>
249 </table></div>
250 </div>
251 <hr>
252 <div class="refsect2">
253 <a name="g-pattern-match-simple"></a><h3>g_pattern_match_simple ()</h3>
254 <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a>            g_pattern_match_simple              (<em class="parameter"><code>const <a class="link" href="glib-Basic-Types.html#gchar" title="gchar"><span class="type">gchar</span></a> *pattern</code></em>,
255                                                          <em class="parameter"><code>const <a class="link" href="glib-Basic-Types.html#gchar" title="gchar"><span class="type">gchar</span></a> *string</code></em>);</pre>
256 <p>
257 Matches a string against a pattern given as a string. If this
258 function is to be called in a loop, it's more efficient to compile
259 the pattern once with <a class="link" href="glib-Glob-style-pattern-matching.html#g-pattern-spec-new" title="g_pattern_spec_new ()"><code class="function">g_pattern_spec_new()</code></a> and call
260 <a class="link" href="glib-Glob-style-pattern-matching.html#g-pattern-match-string" title="g_pattern_match_string ()"><code class="function">g_pattern_match_string()</code></a> repeatedly.
261 </p>
262 <div class="variablelist"><table border="0">
263 <col align="left" valign="top">
264 <tbody>
265 <tr>
266 <td><p><span class="term"><em class="parameter"><code>pattern</code></em> :</span></p></td>
267 <td>the UTF-8 encoded pattern</td>
268 </tr>
269 <tr>
270 <td><p><span class="term"><em class="parameter"><code>string</code></em> :</span></p></td>
271 <td>the UTF-8 encoded string to match</td>
272 </tr>
273 <tr>
274 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
275 <td>
276 <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a> if <em class="parameter"><code>string</code></em> matches <em class="parameter"><code>pspec</code></em>
277 </td>
278 </tr>
279 </tbody>
280 </table></div>
281 </div>
282 </div>
283 </div>
284 <div class="footer">
285 <hr>
286           Generated by GTK-Doc V1.18</div>
287 </body>
288 </html>