mirror of
https://github.com/apache/struts.git
synced 2026-08-11 01:27:14 +00:00
WW-3747 - regular expressions in combination with advanced wildcards don't work
git-svn-id: https://svn.apache.org/repos/asf/struts/struts2/trunk@1237092 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@@ -74,7 +74,7 @@ public class RegexPatternMatcher implements PatternMatcher<RegexPatternMatcherEx
|
||||
|
||||
//generate a new pattern used to match URIs
|
||||
//replace {X:B} by (B)
|
||||
String newPattern = data.replaceAll("(\\{.*?:(.*?)\\})", "($2)");
|
||||
String newPattern = data.replaceAll("(\\{[^\\}]*?:(.*?)\\})", "($2)");
|
||||
|
||||
//replace {X} by (.*?)
|
||||
newPattern = newPattern.replaceAll("(\\{.*?\\})", "(.*?)");
|
||||
|
||||
@@ -20,12 +20,12 @@
|
||||
*/
|
||||
package org.apache.struts2.util;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
|
||||
public class RegexPatternMatcherTest extends TestCase {
|
||||
private RegexPatternMatcher matcher = new RegexPatternMatcher();
|
||||
@@ -148,6 +148,38 @@ public class RegexPatternMatcherTest extends TestCase {
|
||||
assertEquals("/some/val0/some/val1/buaaa", values.get("0"));
|
||||
}
|
||||
|
||||
/**
|
||||
* See WW-3747
|
||||
*/
|
||||
public void testWW_3747() {
|
||||
RegexPatternMatcherExpression expr = matcher.compilePattern("/{type}/{author:.+}/list");
|
||||
|
||||
Map<String, String> values = new HashMap<String, String>();
|
||||
|
||||
assertTrue(matcher.match(values, "/philosophy/AynRand/list", expr));
|
||||
assertEquals(5, values.size());
|
||||
assertEquals("philosophy", values.get("type"));
|
||||
assertEquals("AynRand", values.get("author"));
|
||||
|
||||
assertEquals("/philosophy/AynRand/list", values.get("0"));
|
||||
}
|
||||
|
||||
/**
|
||||
* See WW-3747
|
||||
*/
|
||||
public void testWW_3747_2() {
|
||||
RegexPatternMatcherExpression expr = matcher.compilePattern("/event/modify/{action}/{eventId:[0-9]+}");
|
||||
|
||||
Map<String, String> values = new HashMap<String, String>();
|
||||
|
||||
assertTrue(matcher.match(values, "/event/modify/delete/1234", expr));
|
||||
assertEquals(5, values.size());
|
||||
assertEquals("delete", values.get("action"));
|
||||
assertEquals("1234", values.get("eventId"));
|
||||
|
||||
assertEquals("/event/modify/delete/1234", values.get("0"));
|
||||
}
|
||||
|
||||
public void testCompileBad0() {
|
||||
try {
|
||||
matcher.compilePattern("/{test/some");
|
||||
|
||||
Reference in New Issue
Block a user