регулярное выражение в вопросе промахи много из пограничных случаев. При обнаружении URL всегда лучше пользоваться специализированной библиотекой, которая обрабатывает международные доменные имена, новый TLDs как .museum
, круглые скобки и другая пунктуация в и в конце URL и многих других пограничных случаев. Посмотрите сообщение в блоге Jeff Atwood проблема С URL для объяснения некоторых из других проблем.
лучшая сводка библиотек соответствия URL находится в [1 117] , Ответ Dan Dascalescu
(по состоянию на февраль 2014)
Добавляют "g" до конца регулярного выражения для включения глобального соответствия:
/ig;
, Но который только решает проблему в вопросе, где регулярное выражение только заменяло первое соответствие. не используют тот код.
Предполагая, что эти методы находятся в одной из библиотек, это выглядит как проблема с упорядочением.
При компоновке библиотек в исполняемый файл они выполняются в том порядке, в котором они объявлены.
Кроме того, компоновщик будет принимать только методы / функции, необходимые для разрешения текущих незавершенных зависимостей. Если последующая библиотека затем использует методы / функции, которые изначально не требовались объектами, у вас будут отсутствующие зависимости.
Как это работает:
Example:
Objects requires:
Lib 1 provides:
Lib 2 provides
If linked like this:
gcc -o plop plop.o -l1 -l2
Then the linker will fail to resolve the read and write symbols.
But if I link the application like this:
gcc -o plop plop.o -l2 -l1
Then it will link correctly. As l2 resolves the BatchRead and BatchWrite dependencies but also adds two new ones (read and write). When we link with l1 next all four dependencies are resolved.
Эта ошибка компоновщика обычно (по моему опыту) означает, что вы переопределили виртуальную функцию в дочернем классе с помощью объявления, но не дали определения для метода. Например:
class Base
{
virtual void f() = 0;
}
class Derived : public Base
{
void f();
}
Но вы не дали определения f. Когда вы используете класс, вы получаете ошибку компоновщика. Как и обычная ошибка компоновщика, это потому, что компилятор знал, о чем вы говорите, но компоновщик не смог найти определение. Просто у него очень трудное для понимания сообщение.