Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 8265)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 8266)
@@ -147,5 +147,5 @@
         /**
          * Creates the fixing {@link Command} for the given primitive. The {@code matchingSelector} is used to
-         * evaluate placeholders (cf. {@link org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker.TagCheck#insertArguments(Selector, String)}).
+         * evaluate placeholders (cf. {@link org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker.TagCheck#insertArguments(Selector, String, OsmPrimitive)}).
          */
         abstract Command createCommand(final OsmPrimitive p, final Selector matchingSelector);
@@ -167,5 +167,5 @@
                 return null;
             }
-            return TagCheck.insertArguments(matchingSelector, s);
+            return TagCheck.insertArguments(matchingSelector, s, p);
         }
 
@@ -386,9 +386,9 @@
          * {@link org.openstreetmap.josm.gui.mappaint.mapcss.Selector.GeneralSelector}.
          */
-        static String determineArgument(Selector.GeneralSelector matchingSelector, int index, String type) {
+        static String determineArgument(Selector.GeneralSelector matchingSelector, int index, String type, OsmPrimitive p) {
             try {
                 final Condition c = matchingSelector.getConditions().get(index);
                 final Tag tag = c instanceof Condition.KeyCondition
-                        ? ((Condition.KeyCondition) c).asTag()
+                        ? ((Condition.KeyCondition) c).asTag(p)
                         : c instanceof Condition.SimpleKeyValueCondition
                         ? ((Condition.SimpleKeyValueCondition) c).asTag()
@@ -417,7 +417,7 @@
          * key/value/tag of the {@code index}-th {@link Condition} of {@code matchingSelector}.
          */
-        static String insertArguments(Selector matchingSelector, String s) {
+        static String insertArguments(Selector matchingSelector, String s, OsmPrimitive p) {
             if (s != null && matchingSelector instanceof Selector.ChildOrParentSelector) {
-                return  insertArguments(((Selector.ChildOrParentSelector)matchingSelector).right, s);
+                return insertArguments(((Selector.ChildOrParentSelector)matchingSelector).right, s, p);
             } else if (s == null || !(matchingSelector instanceof GeneralSelector)) {
                 return s;
@@ -426,5 +426,5 @@
             final StringBuffer sb = new StringBuffer();
             while (m.find()) {
-                final String argument = determineArgument((Selector.GeneralSelector) matchingSelector, Integer.parseInt(m.group(1)), m.group(2));
+                final String argument = determineArgument((Selector.GeneralSelector) matchingSelector, Integer.parseInt(m.group(1)), m.group(2), p);
                 try {
                     // Perform replacement with null-safe + regex-safe handling
@@ -501,5 +501,5 @@
          */
         String getDescriptionForMatchingSelector(OsmPrimitive p, Selector matchingSelector) {
-            return insertArguments(matchingSelector, getDescription(p));
+            return insertArguments(matchingSelector, getDescription(p), p);
         }
 
Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java	(revision 8265)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java	(revision 8266)
@@ -4,4 +4,5 @@
 import java.text.MessageFormat;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.EnumSet;
 import java.util.Objects;
@@ -340,6 +341,13 @@
         }
 
-        public Tag asTag() {
-            return new Tag(label);
+        public Tag asTag(OsmPrimitive p) {
+            String key = label;
+            if (KeyMatchType.REGEX.equals(matchType)) {
+                final Collection<String> matchingKeys = Utils.filter(p.keySet(), containsPattern);
+                if (!matchingKeys.isEmpty()) {
+                    key = matchingKeys.iterator().next();
+                }
+            }
+            return new Tag(key, p.get(key));
         }
 
Index: /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java	(revision 8265)
+++ /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java	(revision 8266)
@@ -8,4 +8,5 @@
 
 import java.io.StringReader;
+import java.util.Collection;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
@@ -26,5 +27,7 @@
 import org.openstreetmap.josm.data.osm.OsmUtils;
 import org.openstreetmap.josm.data.validation.Severity;
+import org.openstreetmap.josm.data.validation.TestError;
 import org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker.TagCheck;
+import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.ParseException;
 
 /**
@@ -39,4 +42,10 @@
     public static void setUp() {
         JOSMFixture.createUnitTestFixture().init();
+    }
+
+    static MapCSSTagChecker buildTagChecker(String css) throws ParseException {
+        final MapCSSTagChecker test = new MapCSSTagChecker();
+        test.checks.putAll("test", TagCheck.readMapCSS(new StringReader(css)));
+        return test;
     }
 
@@ -69,5 +78,5 @@
         n2.put("natural", "wood");
         assertFalse(check.evaluate(n2));
-        assertThat(MapCSSTagChecker.TagCheck.insertArguments(check.rule.selectors.get(0), "The key is {0.key} and the value is {0.value}"),
+        assertThat(MapCSSTagChecker.TagCheck.insertArguments(check.rule.selectors.get(0), "The key is {0.key} and the value is {0.value}", null),
                 is("The key is natural and the value is marsh"));
     }
@@ -89,4 +98,24 @@
 
     @Test
+    public void test9782() throws Exception {
+        final MapCSSTagChecker test = buildTagChecker("*[/.+_name/][!name] {" +
+                "throwWarning: tr(\"has {0} but not {1}\", \"{0.key}\", \"{1.key}\");}");
+        final OsmPrimitive p = OsmUtils.createPrimitive("way alt_name=Foo");
+        final Collection<TestError> errors = test.getErrorsForPrimitive(p, false);
+        assertThat(errors.size(), is(1));
+        assertThat(errors.iterator().next().getMessage(), is("has alt_name but not name"));
+    }
+
+    @Test
+    public void test10859() throws Exception {
+        final MapCSSTagChecker test = buildTagChecker("way[highway=footway][foot?!] {\n" +
+                "  throwWarning: tr(\"{0} used with {1}\", \"{0.value}\", \"{1.tag}\");}");
+        final OsmPrimitive p = OsmUtils.createPrimitive("way highway=footway foot=no");
+        final Collection<TestError> errors = test.getErrorsForPrimitive(p, false);
+        assertThat(errors.size(), is(1));
+        assertThat(errors.iterator().next().getMessage(), is("footway used with foot=no"));
+    }
+
+    @Test
     public void testInit() throws Exception {
         MapCSSTagChecker c = new MapCSSTagChecker();
