Browse Source

support for star-in-the-middle RE pattern

[SVN r28748]
Aleksey Gurtovoy 21 years ago
parent
commit
f67e5256e5

+ 10 - 1
tools/regression/xsl_reports/xsl/test/test_re_match.xml

@@ -31,4 +31,13 @@ http://www.boost.org/LICENSE_1_0.txt)
 <test pattern="dsafasd*" text="dsafasd" />
 <test pattern="dsafasd*" text="__dsafasd" />
 
-</root>
+
+<test pattern="dsaf*asd" text="" />
+<test pattern="dsaf*asd" text="dsaf__asd" />
+<test pattern="dsaf*asd" text="dsafasd" />
+<test pattern="dsafas*d" text="dsafasdd" />
+<test pattern="d*safasd" text="ddsafasd" />
+<test pattern="dsafas*d" text="dsafas" />
+<test pattern="d*safasd" text="safasd" />
+
+</root>

+ 6 - 1
tools/regression/xsl_reports/xsl/test/test_re_match.xsl

@@ -39,7 +39,12 @@ http://www.boost.org/LICENSE_1_0.txt)
             </xsl:when>
             <xsl:when test="substring( $pattern, string-length($pattern), 1 ) = '*' ">
                 <xsl:variable name="pattern_head" select="substring( $pattern, 1, string-length($pattern) - 2 )"/>
-                <func:result select="substring( $text, 1, string-length($pattern_head) ) = $pattern_head "/>
+                <func:result select="starts-with( $text, $pattern_head )"/>
+            </xsl:when>
+            <xsl:when test="contains( $pattern, '*' ) ">
+                <xsl:variable name="pattern_head" select="substring-before( $pattern, '*' )"/>
+                <xsl:variable name="pattern_tail" select="substring-after( $pattern, '*' )"/>
+                <func:result select="starts-with( $text, $pattern_head ) and substring( $text, string-length($text) - string-length($pattern_tail) + 1, string-length($pattern_tail) ) = $pattern_tail"/>
             </xsl:when>
         </xsl:choose>
     </func:function>

+ 6 - 1
tools/regression/xsl_reports/xsl/v2/common.xsl

@@ -160,7 +160,12 @@ http://www.boost.org/LICENSE_1_0.txt)
             </xsl:when>
             <xsl:when test="substring( $pattern, string-length($pattern), 1 ) = '*' ">
                 <xsl:variable name="pattern_head" select="substring( $pattern, 1, string-length($pattern) - 2 )"/>
-                <func:result select="substring( $text, 1, string-length($pattern_head) ) = $pattern_head "/>
+                <func:result select="starts-with( $text, $pattern_head )"/>
+            </xsl:when>
+            <xsl:when test="contains( $pattern, '*' ) ">
+                <xsl:variable name="pattern_head" select="substring-before( $pattern, '*' )"/>
+                <xsl:variable name="pattern_tail" select="substring-after( $pattern, '*' )"/>
+                <func:result select="starts-with( $text, $pattern_head ) and substring( $text, string-length($text) - string-length($pattern_tail) + 1, string-length($pattern_tail) ) = $pattern_tail"/>
             </xsl:when>
         </xsl:choose>
     </func:function>

粤ICP备19079148号