Declare @fs_e int, @C_Tables CURSOR, @Table varchar(50)
SET @C_Tables = CURSOR FOR
select name from sysobjects where OBJECTPROPERTY(id, N'IsUserTable') = 1 AND name like 'TR_%'
OPEN @C_Tables
FETCH @C_Tables INTO @Table
SELECT @fs_e = sdec.fetch_Status FROM sys.dm_exec_cursors(0) as sdec where sdec.name = '@C_Tables'
WHILE ( @fs_e <> -1)
BEGIN
exec('Select * from '+ @Table)
FETCH @C_Tables INTO @Table
SELECT @fs_e = sdec.fetch_Status FROM sys.dm_exec_cursors(0) as sdec where sdec.name = '@C_Tables'
END
( Обновление : август 2011 )
Как упоминания geofflane в [1 110] его ответ , Java 7 теперь поддерживает названные группы .
, tchrist указывает в комментарии, что поддержка ограничена.
Он детали ограничения в его большом ответе" Java Помощник Regex "
названная поддержка группы Java 7 regex была представлена назад в [1 114] сентябрь 2010 в блоге .
Oracle В официальном выпуске Java 7, конструкции для поддержки именованной группы фиксации:
<час>
(?<name>capturing text)
для определения именованной группы "имя"\k<name>
к обратной ссылке именованная группа "имя"${name}
для ссылки полученной группе в замещающей строке MatcherMatcher.group(String name)
для возврата полученной входной подпоследовательности данной "названной группой".
Другие альтернативы для предварительного Java 7 были:
( Исходный ответ : Jan 2009 , со следующими двумя связями, теперь разорванными)
, Вы не можете обратиться к именованной группе, если Вы не кодируете свою собственную версию Regex...
, Который является точно, что Gorbush2 сделал в этом потоке .
(ограниченная реализация, как указано снова [1 127] tchrist, поскольку это только ищет идентификаторы ASCII. tchrist детализирует ограничение как:
только способность иметь ту, названную группой на то же имя (которым Вы don’t всегда управляете!) и не бывший способный использовать их для в - regex рекурсия.
Примечание: можно найти истинные regex примеры рекурсии в Perl и PCRE regexes, как упомянуто в [1 128] Питание Regexp , Соответствующие строки спецификаций и PCRE со Сбалансированными Круглыми скобками слайд)
Пример:
Строка:
"TEST 123"
RegExp:
"(?<login>\\w+) (?<id>\\d+)"
Доступ
matcher.group(1) ==> TEST
matcher.group("login") ==> TEST
matcher.name(1) ==> login
Замена
matcher.replaceAll("aaaaa_$1_sssss_$2____") ==> aaaaa_TEST_sssss_123____
matcher.replaceAll("aaaaa_${login}_sssss_${id}____") ==> aaaaa_TEST_sssss_123____
<час> (извлекают из реализации)
public final class Pattern
implements java.io.Serializable
{
[...]
/**
* Parses a group and returns the head node of a set of nodes that process
* the group. Sometimes a double return system is used where the tail is
* returned in root.
*/
private Node group0() {
boolean capturingGroup = false;
Node head = null;
Node tail = null;
int save = flags;
root = null;
int ch = next();
if (ch == '?') {
ch = skip();
switch (ch) {
case '<': // (?<xxx) look behind or group name
ch = read();
int start = cursor;
[...]
// test forGroupName
int startChar = ch;
while(ASCII.isWord(ch) && ch != '>') ch=read();
if(ch == '>'){
// valid group name
int len = cursor-start;
int[] newtemp = new int[2*(len) + 2];
//System.arraycopy(temp, start, newtemp, 0, len);
StringBuilder name = new StringBuilder();
for(int i = start; i< cursor; i++){
name.append((char)temp[i-1]);
}
// create Named group
head = createGroup(false);
((GroupTail)root).name = name.toString();
capturingGroup = true;
tail = root;
head.next = expr(tail);
break;
}
Да, но это беспорядочный взлом классов солнца. Есть более простой способ:
http://code.google.com/p/ named-regexp/
named-regexp - это тонкая оболочка для стандартные регулярные выражения JDK реализация, с единой цель обработки именованного захвата группы в стиле .net: (? ...).
Может использоваться с Java 5 и 6 (используются дженерики).
Java 7 будет обрабатывать именованный захват группы, поэтому этот проект не предназначен до последнего.