Этот прием здесь использует тайное table-layout:fixed
правило
, Этот CSS должен работать против Вашего демонстрационного HTML:
table {table-layout:fixed}
td {overflow:hidden; white-space:nowrap}
также необходимо определить явную ширину столбцов для <td>
с.
Эти table-layout:fixed
в правиле говорится, что "Ширины ячеек этой таблицы зависят от того, что я говорю, не от фактического содержания в ячейках". Это обычно полезно, потому что браузер может начать отображать таблицу после того, как это получило первое <tr>
. Иначе браузер должен получить всю таблицу, прежде чем это сможет вычислить ширину столбцов.
Я использую класс для обертывания PCRE, чтобы упростить это, но после pcre_exec овектор содержит индексы подстроки, которые вам нужны для поиска совпадений в исходной строке.
Так что это было бы быть примерно таким:
#include <string>
#include <iostream>
#include "pcre.h"
int main (int argc, char *argv[])
{
const char *error;
int erroffset;
pcre *re;
int rc;
int i;
int ovector[100];
char *regex = "From:([^@]+)@([^\r]+)";
char str[] = "From:regular.expressions@example.com\r\n"\
"From:exddd@43434.com\r\n"\
"From:7853456@exgem.com\r\n";
re = pcre_compile (regex, /* the pattern */
PCRE_MULTILINE,
&error, /* for error message */
&erroffset, /* for error offset */
0); /* use default character tables */
if (!re)
{
printf("pcre_compile failed (offset: %d), %s\n", erroffset, error);
return -1;
}
unsigned int offset = 0;
unsigned int len = strlen(str);
while (offset < len && (rc = pcre_exec(re, 0, str, len, offset, 0, ovector, sizeof(ovector))) >= 0)
{
for(int i = 0; i < rc; ++i)
{
printf("%2d: %.*s\n", i, ovector[2*i+1] - ovector[2*i], str + ovector[2*i]);
}
offset = ovector[1];
}
return 1;
}