aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad Jorsch <bjorsch@wikimedia.org>2013-08-27 15:28:52 -0400
committerTim Starling <tstarling@wikimedia.org>2013-10-24 09:44:33 +0000
commitc8006382739518fda279344638b8e263d84d72dc (patch)
treeb7948d59b7c064088440eb96b335f2dcc28aa9e4
parentde7af7ac2c651d747221dd322fa9e40956681cb9 (diff)
downloadmediawikicore-c8006382739518fda279344638b8e263d84d72dc.tar.gz
mediawikicore-c8006382739518fda279344638b8e263d84d72dc.zip
Improve linkprefix regular expressions
The regular expression in the linkprefix message is run against the entire page up to each wikilink, and is expected to capture one group having everything except the prefix and another having only the prefix. For long pages this winds up being a lot of text, so inefficient regular expressions are going to cause problems. The current regex is this: /^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD This is not efficient: it will scan through the string trying to match against every run of one or more letters/non-ASCII characters, backtracking at every one except possibly the last. The only reason this hasn't been a huge problem everywhere is because only a few languages have this feature enabled. This change replaces this with this regex: /^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD This is rather more efficient: it will grab the whole string (which is actually fast even for huge strings), then back off character by character until it finds one that isn't a letter/non-ASCII. Note that the above could be simplified somewhat: /^((?>.*[^a-zA-Z\\x80-\\xff]|))(.+)$/sD The performance improvement here is minor, and Gujarati, Church Slavic, Udmurt, and Ukrainian would still need the other style for their current implementations. For Gujarati, we also use another regex trick: a look-behind assertion in PCRE must be fixed length, so something like (?<!a|bb) won't work. But that regex fragment is equivalent to (?<!a)(?<!bb) which is allowed, so we use that instead. Bug: 52865 Change-Id: Iaa7eaa446b3f045a9ce970affcb2a889f44bdefd
-rw-r--r--languages/messages/MessagesAry.php2
-rw-r--r--languages/messages/MessagesAz.php2
-rw-r--r--languages/messages/MessagesCe.php2
-rw-r--r--languages/messages/MessagesCrh_cyrl.php2
-rw-r--r--languages/messages/MessagesCrh_latn.php2
-rw-r--r--languages/messages/MessagesCu.php2
-rw-r--r--languages/messages/MessagesCv.php2
-rw-r--r--languages/messages/MessagesEn.php2
-rw-r--r--languages/messages/MessagesGa.php2
-rw-r--r--languages/messages/MessagesGu.php2
-rw-r--r--languages/messages/MessagesId.php2
-rw-r--r--languages/messages/MessagesIs.php2
-rw-r--r--languages/messages/MessagesKa.php2
-rw-r--r--languages/messages/MessagesKaa.php2
-rw-r--r--languages/messages/MessagesKiu.php2
-rw-r--r--languages/messages/MessagesKm.php2
-rw-r--r--languages/messages/MessagesLtg.php2
-rw-r--r--languages/messages/MessagesMk.php2
-rw-r--r--languages/messages/MessagesMs.php2
-rw-r--r--languages/messages/MessagesMt.php2
-rw-r--r--languages/messages/MessagesNe.php2
-rw-r--r--languages/messages/MessagesNn.php2
-rw-r--r--languages/messages/MessagesRo.php2
-rw-r--r--languages/messages/MessagesRoa_tara.php2
-rw-r--r--languages/messages/MessagesSc.php2
-rw-r--r--languages/messages/MessagesSi.php2
-rw-r--r--languages/messages/MessagesSr_ec.php2
-rw-r--r--languages/messages/MessagesSr_el.php2
-rw-r--r--languages/messages/MessagesTl.php2
-rw-r--r--languages/messages/MessagesTt_cyrl.php2
-rw-r--r--languages/messages/MessagesTt_latn.php2
-rw-r--r--languages/messages/MessagesUdm.php2
-rw-r--r--languages/messages/MessagesUg_arab.php2
-rw-r--r--languages/messages/MessagesUk.php2
-rw-r--r--languages/messages/MessagesUz.php2
-rw-r--r--languages/messages/MessagesWar.php2
36 files changed, 36 insertions, 36 deletions
diff --git a/languages/messages/MessagesAry.php b/languages/messages/MessagesAry.php
index 9f1b3364d646..ceadcf3fa189 100644
--- a/languages/messages/MessagesAry.php
+++ b/languages/messages/MessagesAry.php
@@ -142,7 +142,7 @@ $messages = array(
'noindex-category' => 'shat mamfhtsach',
'broken-file-category' => 'ṣfaḫi fiha wṣlat milffaṫ mhrrsa',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'ala',
'article' => 'sfht mohtawa',
diff --git a/languages/messages/MessagesAz.php b/languages/messages/MessagesAz.php
index 7b345b349665..33ef132b12e4 100644
--- a/languages/messages/MessagesAz.php
+++ b/languages/messages/MessagesAz.php
@@ -206,7 +206,7 @@ $messages = array(
'noindex-category' => 'İndeksləşdirilməyən səhifələr',
'broken-file-category' => 'İşləməyən fayl keçidləri olan səhifələr',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'Haqqında',
'article' => 'Mündəricat',
diff --git a/languages/messages/MessagesCe.php b/languages/messages/MessagesCe.php
index 4e02782747e1..0533b95120f6 100644
--- a/languages/messages/MessagesCe.php
+++ b/languages/messages/MessagesCe.php
@@ -458,7 +458,7 @@ $messages = array(
'broken-file-category' => '{{#switch:{{NAMESPACE}}
|{{ns:0}}=Болх цабеш файлийн хьажорагаш йолу агӀонаш}}',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'Цуьнах лаьцна',
'article' => 'Яззам',
diff --git a/languages/messages/MessagesCrh_cyrl.php b/languages/messages/MessagesCrh_cyrl.php
index a582b187daf8..1d8cf70ab3f2 100644
--- a/languages/messages/MessagesCrh_cyrl.php
+++ b/languages/messages/MessagesCrh_cyrl.php
@@ -230,7 +230,7 @@ $messages = array(
'noindex-category' => 'Индекссиз саифелер',
'broken-file-category' => 'Ичинде бозукъ файл багълантылары олгъан саифелер',
-'linkprefix' => '/^(.*?)([a-zâçğıñöşüA-ZÂÇĞİÑÖŞÜa-яёА-ЯЁ«„]+)$/sDu',
+'linkprefix' => '/^((?>.*(?<![a-zâçğıñöşüA-ZÂÇĞİÑÖŞÜa-яёА-ЯЁ«„])))(.+)$/sDu',
'about' => 'Акъкъында',
'article' => 'Саифе',
diff --git a/languages/messages/MessagesCrh_latn.php b/languages/messages/MessagesCrh_latn.php
index bd6306f97880..9b51638099e8 100644
--- a/languages/messages/MessagesCrh_latn.php
+++ b/languages/messages/MessagesCrh_latn.php
@@ -224,7 +224,7 @@ $messages = array(
'noindex-category' => 'İndekssiz saifeler',
'broken-file-category' => 'İçinde bozuq fayl bağlantıları olğan saifeler',
-'linkprefix' => '/^(.*?)([a-zâçğıñöşüA-ZÂÇĞİÑÖŞÜa-яёА-ЯЁ«„]+)$/sDu',
+'linkprefix' => '/^((?>.*(?<![a-zâçğıñöşüA-ZÂÇĞİÑÖŞÜa-яёА-ЯЁ«„])))(.+)$/sDu',
'about' => 'Aqqında',
'article' => 'Saife',
diff --git a/languages/messages/MessagesCu.php b/languages/messages/MessagesCu.php
index e9c7e059edf6..8a6738d0cb94 100644
--- a/languages/messages/MessagesCu.php
+++ b/languages/messages/MessagesCu.php
@@ -180,7 +180,7 @@ $messages = array(
'category-subcat-count' => '{{PLURAL:$2|Сѥи катигорїи тъкъмо сꙗ подъкатигорїꙗ ѥстъ|Сѥи катигорїи {{PLURAL:$1|ѥдина подъкатигорїꙗ ѥстъ|2 подъкатигорїи ѥстє|$1 подъкатигорїѩ сѫтъ}} · а вьсѩ жє подъкатигорїѩ число $2 ѥстъ}}',
'listingcontinuesabbrev' => '· вѧщє',
-'linkprefix' => '/^(.*?)(„|«)$/sD',
+'linkprefix' => '/^((?>.*(?<!(?:„|«)$)))(.+)$/sDu',
'about' => 'опьсаниѥ',
'article' => 'члѣнъ',
diff --git a/languages/messages/MessagesCv.php b/languages/messages/MessagesCv.php
index ef5f4f1ca493..0bbb896fc626 100644
--- a/languages/messages/MessagesCv.php
+++ b/languages/messages/MessagesCv.php
@@ -153,7 +153,7 @@ $messages = array(
'category-file-count-limited' => 'Ку категоринче $1 файл.',
'listingcontinuesabbrev' => '(малалли)',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff«"]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff«"])))(.+)$/sD',
'about' => 'Ăнлантаркăч',
'article' => 'Статья',
diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php
index ec8f0f2634f0..2cefeb8a05e5 100644
--- a/languages/messages/MessagesEn.php
+++ b/languages/messages/MessagesEn.php
@@ -790,7 +790,7 @@ future releases. Also note that since each list value is wrapped in a unique
'broken-file-category' => 'Pages with broken file links',
'categoryviewer-pagedlinks' => '($1) ($2)', # only translate this message to other languages if you have to change it
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD', # only translate this message to other languages if you have to change it
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD', # only translate this message to other languages if you have to change it
'about' => 'About',
'article' => 'Content page',
diff --git a/languages/messages/MessagesGa.php b/languages/messages/MessagesGa.php
index d7b37f556449..782df4910f46 100644
--- a/languages/messages/MessagesGa.php
+++ b/languages/messages/MessagesGa.php
@@ -218,7 +218,7 @@ $messages = array(
'listingcontinuesabbrev' => 'ar lean.',
'index-category' => 'Leathanaigh innéacsaithe',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'Maidir leis',
'article' => 'Leathanach ábhair',
diff --git a/languages/messages/MessagesGu.php b/languages/messages/MessagesGu.php
index b29ebcdcc20a..35edb97420dc 100644
--- a/languages/messages/MessagesGu.php
+++ b/languages/messages/MessagesGu.php
@@ -291,7 +291,7 @@ $messages = array(
'noindex-category' => 'અનુક્રમણિકા નહી બનાવેલા પાનાં',
'broken-file-category' => 'ફાઇલોની ત્રૂટક કડીઓવાળાં પાનાં',
-'linkprefix' => '/^(.*?)((?:[a-zA-Z\\x80-\\xff]|ક્|ખ્|ગ્|ઘ્|ચ્|છ્|જ્|ઝ્|ટ્|ઠ્|ડ્|ઢ્|ણ્|ત્|થ્|દ્|ધ્|ન્|પ્|ફ્|બ્|ભ્|મ્|ય્|ર્|લ્|વ્|સ્|શ્|ષ્|હ્|ળ્|ક્ષ્|જ્ઞ્|અ|આ|ઇ|ઈ|ઉ|ઊ|એ|ઐ|ઓ|ઔ|અં|અઃ|અઁ|ઍ|ઑ|ઋ|ઁ|઼|।|્|ા|િ|ી|ુ|ૂ|ે|ૈ|ો|ૌ|ં|ઃ|ૅ|ૉ|ૃ)+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])(?<!ક્|ખ્|ગ્|ઘ્|ચ્|છ્|જ્|ઝ્|ટ્|ઠ્|ડ્|ઢ્|ણ્|ત્|થ્|દ્|ધ્|ન્|પ્|ફ્|બ્|ભ્|મ્|ય્|ર્|લ્|વ્|સ્|શ્|ષ્|હ્|ળ્|અં|અઃ|અઁ)(?<!ક્ષ્|જ્ઞ્)(?<!અ|આ|ઇ|ઈ|ઉ|ઊ|એ|ઐ|ઓ|ઔ|ઍ|ઑ|ઋ|ઁ|઼|।|્|ા|િ|ી|ુ|ૂ|ે|ૈ|ો|ૌ|ં|ઃ|ૅ|ૉ|ૃ)))(.+)$/sD',
'about' => 'વિષે',
'article' => 'લેખનું પાનું',
diff --git a/languages/messages/MessagesId.php b/languages/messages/MessagesId.php
index e4442bf02097..2c3b33d42ea8 100644
--- a/languages/messages/MessagesId.php
+++ b/languages/messages/MessagesId.php
@@ -481,7 +481,7 @@ $messages = array(
'broken-file-category' => 'Halaman dengan gambar rusak',
'categoryviewer-pagedlinks' => '($1) ($2)',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'Tentang',
'article' => 'Halaman isi',
diff --git a/languages/messages/MessagesIs.php b/languages/messages/MessagesIs.php
index 1350fd563f38..86b828177db1 100644
--- a/languages/messages/MessagesIs.php
+++ b/languages/messages/MessagesIs.php
@@ -371,7 +371,7 @@ $messages = array(
'noindex-category' => 'Óraðaðar skrár',
'broken-file-category' => 'Síður með brotna myndatengla',
-'linkprefix' => '/^(.*?)([áÁðÐéÉíÍóÓúÚýÝþÞæÆöÖA-Za-z-–]+)$/sDu',
+'linkprefix' => '/^((?>.*(?<![áÁðÐéÉíÍóÓúÚýÝþÞæÆöÖA-Za-z-–])))(.+)$/sDu',
'about' => 'Um',
'article' => 'Efnissíða',
diff --git a/languages/messages/MessagesKa.php b/languages/messages/MessagesKa.php
index ff4feb737b40..18dd6be8e0df 100644
--- a/languages/messages/MessagesKa.php
+++ b/languages/messages/MessagesKa.php
@@ -310,7 +310,7 @@ $messages = array(
'broken-file-category' => 'გვერდები ფაილების არასწორი ბმულებით',
'categoryviewer-pagedlinks' => '($1) ($2)',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'შესახებ',
'article' => 'სტატია',
diff --git a/languages/messages/MessagesKaa.php b/languages/messages/MessagesKaa.php
index 147e19af7076..3bac5f9b0746 100644
--- a/languages/messages/MessagesKaa.php
+++ b/languages/messages/MessagesKaa.php
@@ -264,7 +264,7 @@ $messages = array(
'category-file-count-limited' => "Usı kategoriyada to'mendegi {{PLURAL:$1|fayl|$1 fayl}} bar.",
'listingcontinuesabbrev' => 'dawamı',
-'linkprefix' => '/^(.*?)([a-zıA-Zİ\\x80-\\xff]+)$/sDu',
+'linkprefix' => '/^((?>.*(?<![a-zıA-Zİ\\x80-\\xff])))(.+)$/sDu',
'about' => 'Haqqında',
'article' => "Mag'lıwmat beti",
diff --git a/languages/messages/MessagesKiu.php b/languages/messages/MessagesKiu.php
index 8f18ce2eec39..8ae5a1043d7e 100644
--- a/languages/messages/MessagesKiu.php
+++ b/languages/messages/MessagesKiu.php
@@ -177,7 +177,7 @@ $messages = array(
'noindex-category' => 'Pelê bêendeksıni',
'broken-file-category' => 'Peli be gıreunê dosyeunê sıkıtau',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'Heqa',
'article' => 'Pela tedeesteyu',
diff --git a/languages/messages/MessagesKm.php b/languages/messages/MessagesKm.php
index c4e951be3c31..912e93078704 100644
--- a/languages/messages/MessagesKm.php
+++ b/languages/messages/MessagesKm.php
@@ -402,7 +402,7 @@ $messages = array(
'broken-file-category' => 'ទំព័រទាំងឡាយដែលដាច់តំណភ្ជាប់',
'categoryviewer-pagedlinks' => '($1) ($2)',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'អំពី',
'article' => 'មាតិកាអត្ថបទ',
diff --git a/languages/messages/MessagesLtg.php b/languages/messages/MessagesLtg.php
index 1b4b7f5c459e..49460daa15ac 100644
--- a/languages/messages/MessagesLtg.php
+++ b/languages/messages/MessagesLtg.php
@@ -105,7 +105,7 @@ $messages = array(
'category-article-count' => '{{PLURAL:$2|Itymā kategorejā ir vīn dūtuo puslopa.|{{PLURAL:$1|Paruodeita $1 puslopa|Paruodeitys $1 puslopys}} nu $2.}}',
'listingcontinuesabbrev' => '(tuoļuojums)',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'Aproksts',
'article' => 'Rakstīņs',
diff --git a/languages/messages/MessagesMk.php b/languages/messages/MessagesMk.php
index fabf59758c14..754fcf88c6d1 100644
--- a/languages/messages/MessagesMk.php
+++ b/languages/messages/MessagesMk.php
@@ -489,7 +489,7 @@ $messages = array(
'noindex-category' => 'Неиндексирани страници',
'broken-file-category' => 'Страници со прекинати врски до податотеки',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'За {{SITENAME}}',
'article' => 'Статија',
diff --git a/languages/messages/MessagesMs.php b/languages/messages/MessagesMs.php
index b1aa1254b1b7..3774bd6f7e11 100644
--- a/languages/messages/MessagesMs.php
+++ b/languages/messages/MessagesMs.php
@@ -338,7 +338,7 @@ $messages = array(
'noindex-category' => 'Laman tak diindeks',
'broken-file-category' => 'Laman yang ada pautan fail yang terputus',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'Perihal',
'article' => 'Laman kandungan',
diff --git a/languages/messages/MessagesMt.php b/languages/messages/MessagesMt.php
index 6bec1c6da2da..f1d67a786147 100644
--- a/languages/messages/MessagesMt.php
+++ b/languages/messages/MessagesMt.php
@@ -411,7 +411,7 @@ $messages = array(
'noindex-category' => 'Paġni mhux indiċizzati',
'broken-file-category' => "Paġni b'ħoloq lejn fajls miksura",
-'linkprefix' => '/^(.*?)([a-żA-Ż\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-żA-Ż\\x80-\\xff])))(.+)$/sD',
'about' => 'Dwar',
'article' => 'artiklu',
diff --git a/languages/messages/MessagesNe.php b/languages/messages/MessagesNe.php
index 6abbfdace5d2..b96da5ac7a3c 100644
--- a/languages/messages/MessagesNe.php
+++ b/languages/messages/MessagesNe.php
@@ -193,7 +193,7 @@ $messages = array(
'noindex-category' => 'क्रमांकन नगरिएका पृष्ठहरु',
'broken-file-category' => 'टुटेको फाइल लिंकसितको पृष्ठ',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'बारेमा',
'article' => 'सामाग्री पृष्ठ',
diff --git a/languages/messages/MessagesNn.php b/languages/messages/MessagesNn.php
index 38d0da7e7f43..f9ffcdac4491 100644
--- a/languages/messages/MessagesNn.php
+++ b/languages/messages/MessagesNn.php
@@ -457,7 +457,7 @@ $messages = array(
'noindex-category' => 'Ikkje-indekserte sider',
'broken-file-category' => 'Sider med brotne fillenkjer',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'Om',
'article' => 'Innhaldsside',
diff --git a/languages/messages/MessagesRo.php b/languages/messages/MessagesRo.php
index 269298fb72ea..2304fb67bf0d 100644
--- a/languages/messages/MessagesRo.php
+++ b/languages/messages/MessagesRo.php
@@ -438,7 +438,7 @@ $messages = array(
'noindex-category' => 'Pagini neindexate',
'broken-file-category' => 'Pagini cu legături invalide către fișiere',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'Despre',
'article' => 'Articol',
diff --git a/languages/messages/MessagesRoa_tara.php b/languages/messages/MessagesRoa_tara.php
index 0eab3d650196..425d0e1f9f11 100644
--- a/languages/messages/MessagesRoa_tara.php
+++ b/languages/messages/MessagesRoa_tara.php
@@ -165,7 +165,7 @@ $messages = array(
'broken-file-category' => 'Pàggene cu collegaminde a le file scuasciate',
'categoryviewer-pagedlinks' => '($1) ($2)',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'Sus a',
'article' => 'Pàgene de le condenute',
diff --git a/languages/messages/MessagesSc.php b/languages/messages/MessagesSc.php
index bfc2b2be00ad..705e4170b610 100644
--- a/languages/messages/MessagesSc.php
+++ b/languages/messages/MessagesSc.php
@@ -177,7 +177,7 @@ $messages = array(
'index-category' => 'Pàginas indicizadas',
'noindex-category' => 'Pàginas no indicitzadas',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'A propòsitu de',
'article' => 'Artìculu',
diff --git a/languages/messages/MessagesSi.php b/languages/messages/MessagesSi.php
index 704055d51d8b..4f40b1fd5c7d 100644
--- a/languages/messages/MessagesSi.php
+++ b/languages/messages/MessagesSi.php
@@ -331,7 +331,7 @@ $messages = array(
'noindex-category' => 'සූචිගත නොකළ පිටු',
'broken-file-category' => 'භින්න වූ ගොනු සබැඳි සහිත පිටු',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'පිළිබඳ',
'article' => 'පටුන',
diff --git a/languages/messages/MessagesSr_ec.php b/languages/messages/MessagesSr_ec.php
index 6b190a5223c2..88c90c4adecf 100644
--- a/languages/messages/MessagesSr_ec.php
+++ b/languages/messages/MessagesSr_ec.php
@@ -536,7 +536,7 @@ $messages = array(
'noindex-category' => 'Непописане странице',
'broken-file-category' => 'Странице с неисправним везама до датотека',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'О нама',
'article' => 'Страница са садржајем',
diff --git a/languages/messages/MessagesSr_el.php b/languages/messages/MessagesSr_el.php
index ddb566888698..55ce97bdea5f 100644
--- a/languages/messages/MessagesSr_el.php
+++ b/languages/messages/MessagesSr_el.php
@@ -444,7 +444,7 @@ $messages = array(
'noindex-category' => 'Nepopisane stranice',
'broken-file-category' => 'Stranice s neispravnim vezama do datoteka',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'O nama',
'article' => 'Stranica sa sadržajem',
diff --git a/languages/messages/MessagesTl.php b/languages/messages/MessagesTl.php
index 4142d51f3638..1d3335518d11 100644
--- a/languages/messages/MessagesTl.php
+++ b/languages/messages/MessagesTl.php
@@ -285,7 +285,7 @@ $messages = array(
'broken-file-category' => 'Mga pahina na may sirang mga kawing ng talaksan',
'categoryviewer-pagedlinks' => '($1) ($2)',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'Patungkol',
'article' => 'Pahina ng nilalaman',
diff --git a/languages/messages/MessagesTt_cyrl.php b/languages/messages/MessagesTt_cyrl.php
index f25aebf6e5d9..479dea8310d4 100644
--- a/languages/messages/MessagesTt_cyrl.php
+++ b/languages/messages/MessagesTt_cyrl.php
@@ -348,7 +348,7 @@ $messages = array(
'noindex-category' => 'Индексланмаган битләр',
'broken-file-category' => 'Файлларга эшләми торган сылтамалар булган битләр',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'Тасвирлама',
'article' => 'Мәкалә',
diff --git a/languages/messages/MessagesTt_latn.php b/languages/messages/MessagesTt_latn.php
index 6d17c364f3c8..36d119732aae 100644
--- a/languages/messages/MessagesTt_latn.php
+++ b/languages/messages/MessagesTt_latn.php
@@ -216,7 +216,7 @@ $messages = array(
'index-category' => 'İndekslanğan bitlär',
'noindex-category' => 'İndekslanmağan bitlär',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'Taswirlama',
'article' => 'Mäqälä',
diff --git a/languages/messages/MessagesUdm.php b/languages/messages/MessagesUdm.php
index 7c16f4ac2be5..ac03870dcef1 100644
--- a/languages/messages/MessagesUdm.php
+++ b/languages/messages/MessagesUdm.php
@@ -151,7 +151,7 @@ $messages = array(
'index-category' => 'Индексировать кароно бамъёс',
'noindex-category' => 'Индексировать каронтэм бамъёс',
-'linkprefix' => '/^(.*?)(„|«)$/sDu',
+'linkprefix' => '/^((?>.*(?<!(?:„|«)$)))(.+)$/sDu',
'about' => 'Та сярысь',
'article' => 'Статья',
diff --git a/languages/messages/MessagesUg_arab.php b/languages/messages/MessagesUg_arab.php
index ab5ee423610b..16c052b38089 100644
--- a/languages/messages/MessagesUg_arab.php
+++ b/languages/messages/MessagesUg_arab.php
@@ -173,7 +173,7 @@ $messages = array(
'broken-file-category' => 'ھۆججەت ئۇلىنىشى بۇزۇلغان بەتلەر',
'categoryviewer-pagedlinks' => '($1) ($2)',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'ھەققىدە',
'article' => 'مۇندەرىجە',
diff --git a/languages/messages/MessagesUk.php b/languages/messages/MessagesUk.php
index d75a5706d7ae..da3ebcd56c77 100644
--- a/languages/messages/MessagesUk.php
+++ b/languages/messages/MessagesUk.php
@@ -504,7 +504,7 @@ $messages = array(
'broken-file-category' => 'Сторінки, що посилаються на неіснуючі файли',
'categoryviewer-pagedlinks' => '($1) ($2)',
-'linkprefix' => '/^(.*?)(„|«)$/sD',
+'linkprefix' => '/^((?>.*(?<!(?:„|«)$)))(.+)$/sDu',
'about' => 'Про',
'article' => 'Стаття',
diff --git a/languages/messages/MessagesUz.php b/languages/messages/MessagesUz.php
index e8746b379a04..41ba94b8889f 100644
--- a/languages/messages/MessagesUz.php
+++ b/languages/messages/MessagesUz.php
@@ -236,7 +236,7 @@ $messages = array(
'noindex-category' => 'Indekslanmaydigan sahifalar',
'broken-file-category' => 'Ishlamaydigan fayl havolalari bor sahifalar',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xffʻʼ«„]+)$/sDu',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xffʻʼ«„])))(.+)$/sDu',
'about' => 'Haqida',
'article' => 'Sahifa',
diff --git a/languages/messages/MessagesWar.php b/languages/messages/MessagesWar.php
index bd99d859632b..62e75c91fc6f 100644
--- a/languages/messages/MessagesWar.php
+++ b/languages/messages/MessagesWar.php
@@ -203,7 +203,7 @@ $messages = array(
'noindex-category' => 'Mga diri nakatudlokan nga pagkli',
'broken-file-category' => 'Mga pakli nga mayda utod nga mga sumpay hin paypay',
-'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
+'linkprefix' => '/^((?>.*(?<![a-zA-Z\\x80-\\xff])))(.+)$/sD',
'about' => 'Mahitungod han',
'article' => 'Pakli hin sulod',