Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Färga valda ord?

Postades av 2004-07-30 14:43:12 - Fredrik Fogelqvist, i forum regular expressions, Tråden har 27 Kommentarer och lästs av 1747 personer

Jag skulle behöva få lite hjälp med att få ordet "byt" och "byta" att färgas röda även om de ligger i början av ett annat ord, t ex byteshandel eller bytarhörna. men endast ordet byt och byta ska färgas.

Jag hämtar upp texten ur databasen och vill därför kunna lägga in länkar såsom Länk utan att länken förstörs också. så alltså ska alla ord emd "byta" eller "byt" i början men som har en punkt i sig, ska alltså inte röras.

Någon som kan lösa problemet?


Svara

Sv: Färga valda ord?

Postades av 2004-07-30 15:44:52 - Per Persson

Det är alltså alla utom de som ligger inne i HTML-taggar som skall hittas?

Nu kan jag inte ASP:s mönstersyntax, men så här ser det ut i Perl (preg_... i PHP):
/((^|>)[^<]*?)(byta?)/i
(sista i:et för "case-independent")

De fetmarkerade texterna kommer att hittas av hela mönstret:
<b>Skall vi byta</b> grejer, <span class="byta"><b>skall vi byta</b> grejer med varann?<br><b>Nu kan vi byta</b>.

Edit:
Insåg just nu att mönstret kommer att få problem om man har t.ex. koden "<p>Bytt är bytt och kommer aldrig igen.</p>"
Det första "Byt" hittas, men inte det andra (tror jag).


Svara

Sv: Färga valda ord?

Postades av 2004-07-30 17:54:41 - Simon Dahlbacka

misstänker nästan att det där är en sån grej som är klumpigt att göra mha. regexp:s.

Men om inget annat så kan du ju gå igenom texten "för hand" och hålla reda på att du har jämt lika många < och > och i så fall så fifflar du om ordet vid match, annars gör du inget..


Svara

Sv: Färga valda ord?

Postades av 2004-07-31 23:59:21 - Per Persson

Så, nu verkar jag ha fått till det i PHP:

<?
$text = 'Jag vill byta1 grejer, du skall byta3 grejer, han måste byta4 grejer? Hon borde byta5 grejer. Fisken bytte färg.';

$tag = '<[^>]*>';
$non_tag = '[^<]*?';
$re = "#(({$tag}|{$non_tag})*?)(byta?)#";

$newtext = preg_replace($re, '\1<span style="color: red">\3</span>', $text);
echo "<p>$newtext</p>";
?>


Översättningen till VB borde vara ganska enkel efter vad jag ser på http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/reconquantifiers.asp med följande sidor. Men för säkerhets skull överlåter jag det åt någon som behärskar det språket bättre.


Svara

Sv: Färga valda ord?

Postades av 2004-08-02 07:52:51 - Fredrik Fogelqvist

Ett tappert försök med en liten funktion i VB... Använde den kod som Per Persson postade och försökte översätta till VB själv. Nån som förstår vad som är fel?

Function BytaText(sText)

Dim objRegEx, sTag, sNonTag

Set objRegEx = New RegExp

objRegEx.Global = True
objRegEx.IgnoreCase = True

sTag = "<[^>]*>"
sNonTag = "[^<]*?"
objRegEx.Pattern = "(" & sTag & ")|(" & sNonTag & ")*?)(byta?)"

sText = objRegEx.replace(sText, "\1<span style='color: red'>\3</span>")

BytaText = sText

End Function


Svara

Sv: Färga valda ord?

Postades av 2004-08-02 11:51:13 - Per Persson

Du har glömt en vänsterparentes. Sedan används väl $n för referens i ersättningssträngen?

Pröva
<code>
objRegEx.Pattern = "((" & sTag & "|" & sNonTag & ")*?)(byta?)"

sText = objRegEx.replace(sText, "$1<span style='color: red'>$3</span>")
</code>
(Skippade även några onödiga parenteser)


Henkoz: Inga avancerade saker har använts. Allt finns så vitt jag sett VBScript.


Svara

Sv: Färga valda ord?

Postades av 2004-08-02 12:03:20 - Fredrik Fogelqvist

Jag vet inte ifall du har kört koden själv, men jag får "out of memory" när jag kör den. Vad är det i koden som gör att den får slut på minnet?

Felet är på den raden som "objRegex.replace" finns på.
Blir det någon slags loop eller nåt?


Svara

Sv: Färga valda ord?

Postades av 2004-08-02 13:53:21 - Thomas Vanhaniemi

Pröva följande...

<code>
objRegEx.Pattern = "((?:" & sTag & "|" & sNonTag & ")*?)(byta?)"

sText = objRegEx.replace(sText, "$1<span style='color: red'>$2</span>")
</code>

Mvh,
Thomas


Svara

Sv: Färga valda ord?

Postades av 2004-08-02 13:57:50 - Fredrik Fogelqvist

Nepps... Blir fortfarande Out of memory... Inte borde det väl bli det? eller stämmer inte erat förslag på pattern?


Svara

Sv: Färga valda ord?

Postades av 2004-08-02 14:05:40 - Per Persson

Jag hade prövat PHP-koden, och hade glömt bort att jag hade tillgång till ASP/VBS.

Den här koden funkar för mig:
<code>
<%
Function BytaText(sText)

Dim objRegEx, sTag, sNonTag

Set objRegEx = New RegExp

objRegEx.Global = True
objRegEx.IgnoreCase = True

sTag = "<[^>]+>"
sNonTag = "[^<]+?"
objRegEx.Pattern = "((<[^>]+?>|[^<]+?)*?)(byta?)"

sText = objRegEx.replace(sText, "$1<span style='color: red'>$3</span>")

BytaText = sText

End Function


text = "Jag vill byta1 grejer, du skall byta3 grejer, han måste byta4 grejer? Hon borde byta5 grejer. Fisken bytte färg."

newtext = bytatext(text)

response.write(newtext)

%>
</code>

Se själv: http://inet.bluerange.se/inta03pepe/regexp.asp
(Lägger kanske till ett formulär så att du kan pröva olika texter.)


Svara

Sv: Färga valda ord?

Postades av 2004-08-02 15:07:28 - Thomas Vanhaniemi

Den där bryter länkar, och det fick den ju inte göra...
Det går nog men hur svårt det är är en annan fråga.
Man vill ju kunna säga att "byt ut byt eller byta mot ... om det inte är inom a taggar..."

EDIT:
Ok, den bryter inte länkarna men den ersätter inuti a taggar vilket enligt mig är fel...

Mvh,
Thomas


Svara

Sv: Färga valda ord?

Postades av 2004-08-02 15:17:21 - Thomas Vanhaniemi

Ok, nu har jag en lite enklare variant av pattern som fungerar med VBScript...
Den kontrollerar om nästa tag som kommer är </a och hoppar över den träffen om så är fallet...

<code>
Function BytaText(sText)
Dim objRegEx
Set objRegEx = New RegExp

objRegEx.Global = True
objRegEx.IgnoreCase = True
objRegEx.Pattern = "((?:<[^>]+?>|[^<]+?)*?)(byta?)(?![^<]*</a)"

sText = objRegEx.Replace(sText, "$1<span style='color: red'>$2</span>")

BytaText = sText
End Function
</code>

Mvh,
Thomas


Svara

Sv: Färga valda ord?

Postades av 2004-08-02 15:43:45 - Fredrik Fogelqvist

Absolut ingen dumm idé. Tackar för hjälpen hittils.

Men med följande pattern...

objRegEx.Pattern = "(byta?)(?![^<]*</.+>)"


... fungerar den med <img> taggen också, bara man kommer ihåg att lägga till </img> efter. Men det kanske finns en ännu bättre lösning.


Svara

Sv: Färga valda ord?

Postades av 2004-08-02 15:45:21 - Thomas Vanhaniemi

Testa den igen, den är uppdaterad sedan det där mönstret...
Pers mönster är också insatt...

Mvh,
Thomas


Svara

Sv: Färga valda ord?

Postades av 2004-08-02 15:54:37 - Thomas Vanhaniemi

Ok, nu tror jag att jag har kommit fram med ett ännu bättre mönster...
Så långt jag testat den fungerar den utan fel...

<code>
Function BytaText(sText)
Dim objRegEx
Set objRegEx = New RegExp

objRegEx.Global = True
objRegEx.IgnoreCase = True
objRegEx.Pattern = "(byta?)(?![^<>]*>|[^<]*</a)"

sText = objRegEx.Replace(sText, "<span style='color: red'>$1</span>")

BytaText = sText
End Function
</code>

EDIT:
Enda gången detta mönster inte fungerar är när det står till exempel såhär: <p class="byt1">Byt2 här</p>Byt3 och byt4>byt5
Det enda som kommer att träffas ovan är byt2 och byt5...

Mvh,
Thomas


Svara

Sv: Färga valda ord?

Postades av 2004-08-02 16:22:21 - Thomas Vanhaniemi

Ok, nu har jag en som fungerar ännu bättre, men dock är det så att mönstret inte fungerar i VBScript...
Du måste köra det i nyare verion av RegExp som stödjer Lookbehind tyvärr...
Mönstret är i alla fall följande...

<info>(byta?)(?![^<>]*(?<=<[^<>]*?)>|[^<]*</a)</info>

Mvh,
Thomas


Svara

Sv: Färga valda ord?

Postades av 2004-08-02 16:33:43 - Per Persson

Den som jag prövat på är tydligen Microsoft-IIS/6.0.


Svara

Sv: Färga valda ord?

Postades av 2004-08-02 16:52:28 - Per Persson

Har ändrat skriptet på http://inet.bluerange.se/inta03pepe/regexp.asp. Pröva det igen!


Svara

Sv: Färga valda ord?

Postades av 2004-08-02 19:30:16 - Thomas Vanhaniemi

Per,

Det där fungerade inte alls bra...
Testa köra fast med följande text: Hej! Bytt är byta BYT!

Mvh,
Thomas


Svara

Sv: Färga valda ord?

Postades av 2004-08-03 00:36:47 - Per Persson

Jag ger upp. Det går nog inte att lösa med bara ett reguljärt uttryck.


Svara

Sv: Färga valda ord?

Postades av 2004-08-03 09:31:21 - Fredrik Fogelqvist

Asch... jag är rätt nöjd med lösningen som jag fick förut och som jag skrev om lite... tackar så mycket.

Men jag tänkte ifall det finns nån RIKTIGT bra sida där man kan läsa allt man behöver veta om regexp och en massa exempel så att man verkligen fattar..
Tycker det är grymt svårt att förstå regexp faktiskt.


Svara

Sv: Färga valda ord?

Postades av 2004-08-03 10:11:02 - Thomas Vanhaniemi

Brukar alltid föreslå http://www.regular-expressions.info för de förklarar allt så ett snabbt och enkelt sätt samt att det finns några tutorials etc...

Jag tror att den funktionen där jag kombinerade Pers uttryck med lite av mitt för att säkerställa att man inte är inom a taggar fungerar bäst...

Mvh,
Thomas


Svara

Sv: Färga valda ord?

Postades av 2004-08-03 10:12:52 - Thomas Vanhaniemi

Det går om man skulle kunna använda ett mer avancerat uttryck som stödjer Lookaround fullt ut...
VBScript gör dock inte det för där kan man bara kika frammåt i strängen...

Mvh,
Thomas


Svara

Sv: Färga valda ord?

Postades av 2004-08-03 14:53:12 - Per Persson

Jag hittade ett nytt regexp för PHP:
(((^|</?[^a][^>]*>|<a[^>]*>.*?</a>)[^<]*?)*?)(byta?)

Under VB hänger det sig dock. Varför vet jag inte.


Svara

Sv: Färga valda ord?

Postades av 2004-08-03 15:13:55 - Thomas Vanhaniemi

Det där mönstret hänger sig inte i mitt testprogram, dock skrivet i VB.NET...
Men den klarar inte av följande: byta blöja på en bytta
Byt träffas i "byt.htm" vilket den inte fick göra...

Mvh,
Thomas


Svara

Sv: Färga valda ord?

Postades av 2004-08-03 23:40:50 - Per Persson

Det gjorde det tydligen under PHP också... Det är problem om strängen börjar med en tagg. *suck*


Svara

Sv: Färga valda ord?

Postades av 2004-08-04 00:32:40 - Thomas Vanhaniemi

Ja, det är problem där...
Som jag skrev tidigare, om man skulle kunna använda Lookaround fullt ut fungerar mitt uttryck här lite ovanför men VBScript har inte stöd för det fullt ut så man måste ju göra det bästa av situationen...

Mvh,
Thomas


Svara

Nyligen

  • 18:37 Remove the bumper in AUDI
  • 15:35 Chicken road crash game
  • 21:41 Automotive Services UK
  • 20:44 Erfarenhet av CBD-olja mot sömnpro
  • 12:13 Sex Dolls for Sale
  • 19:42 Online Casinos for Haitian Players
  • 19:38 Rekommendera något intressant
  • 19:13 Международная перевозка грузов

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 892
27 965
271 778
528
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies