Wyrażenie regularne zaznacza cały tekst pomiędzy znacznikami
Jaki jest najlepszy sposób na zaznaczenie całego tekstu pomiędzy znacznikami 2-ex: tekst pomiędzy wszystkimi znacznikami " pre " na stronie.
13 answers
Możesz użyć "<pre>(.*?)</pre>"
, (zastępując pre dowolnym tekstem) i wyodrębnić pierwszą grupę (dla bardziej szczegółowych instrukcji określ język), ale zakłada to uproszczone przekonanie, że masz bardzo prosty i poprawny HTML.
Jak sugerowali inni komentatorzy, jeśli robisz coś skomplikowanego, użyj parsera HTML.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-23 21:00:44
Znacznik może być uzupełniony w innej linii. Dlatego należy dodać \n
.
<PRE>(.|\n)*?<\/PRE>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-17 11:21:27
Tego bym użył.
(?<=(<pre>))(\w|\d|\n|[().,\-:;@#$%^&*\[\]"'+–/\/®°⁰!?{}|`~]| )+?(?=(</pre>))
W Zasadzie to co robi to:
(?<=(<pre>))
selekcja musi być poprzedzona znacznikiem <pre>
(\w|\d|\n|[().,\-:;@#$%^&*\[\]"'+–/\/®°⁰!?{}|~]| )
to tylko wyrażenie regularne, które chcę zastosować. W tym przypadku wybiera literę, cyfrę lub znak nowej linii lub niektóre znaki specjalne wymienione w przykładzie w nawiasach kwadratowych. Znak rury |
oznacza po prostu " lub ".
+?
Stany znaków Plus, aby wybrać jedną lub więcej z powyższych - porządek nie ma znaczenia. znak zapytania zmienia domyślne zachowanie z 'greedy' na 'ungreedy'.
(?=(</pre>))
wybór musi być dołączony przez znacznik <pre>
W zależności od przypadku użycia może być konieczne dodanie modyfikatorów, takich jak (i lub m )
- i - case-niewrażliwe
- m - wyszukiwanie wieloliniowe
Tutaj wykonałem to wyszukiwanie w wysublimowanym tekście, więc nie muszę użyć modyfikatorów w moim regex.
Javascript nie obsługuje lookbehind
Powyższy przykład powinien działać dobrze z językami takimi jak PHP, Perl, Java ...
Javascript jednak nie obsługuje lookbehind, więc musimy zapomnieć o używaniu (?<=(<pre>))
i szukać jakiegoś obejścia. Być może proste usunięcie pierwszych czterech znaków z naszego wyniku dla każdej selekcji, jak tutaj
regex dopasuj tekst między znacznikami
Zobacz też JavaScript REGEX DOCUMENTATION for non-capture nawiases
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-31 16:40:51
Użyj poniższego wzorca, aby pobrać zawartość między elementami. Zastąp znacznik [tag] rzeczywistym elementem, z którego chcesz wyodrębnić zawartość.
<[tag]>(.+?)</[tag]>
Czasami znaczniki będą miały atrybuty, takie jak anchor
znacznik mający href
, Następnie użyj poniższego wzorca.
<[tag][^>]*>(.+?)</[tag]>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-20 15:56:43
Nie powinieneś próbować parsować html z wyrażeniami regularnymi Zobacz to pytanie i jak to się skończyło.
Mówiąc najprościej, html nie jest językiem regularnym, więc nie można w pełni analizować go za pomocą wyrażeń regularnych.
Powiedziawszy, że możesz analizować podzbiory html, gdy nie ma podobnych tagów zagnieżdżonych. Tak długo, jak cokolwiek pomiędzy i nie jest samym tagiem, to będzie działać:
preg_match("/<([\w]+)[^>]*>(.*?)<\/\1>/", $subject, $matches);
$matches = array ( [0] => full matched string [1] => tag name [2] => tag content )
Lepszym pomysłem jest użycie parsera, takiego jak natywny DOMDocument, do załadowania twojego html, następnie wybierz swój tag i uzyskaj wewnętrzny html, który może wyglądać mniej więcej tak:
$obj = new DOMDocument();
$obj -> load($html);
$obj -> getElementByTagName('el');
$value = $obj -> nodeValue();
A ponieważ jest to odpowiedni parser, będzie w stanie obsłużyć znaczniki zagnieżdżania itp.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:29
Spróbuj tego....
(?<=\<any_tag\>)(\s*.*\s*)(?=\<\/any_tag\>)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-23 18:31:58
var str = "Lorem ipsum <pre>text 1</pre> Lorem ipsum <pre>text 2</pre>";
str.replace(/<pre>(.*?)<\/pre>/g, function(match, g1) { console.log(g1); });
Ponieważ akceptowana odpowiedź jest bez kodu javascript, więc dodając, że:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-28 01:41:51
Aby wykluczyć znaczniki rozgraniczające:
"(?<=<pre>)(.*?)(?=</pre>)"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-04 19:31:13
Dla wielu linii:
<htmltag>(.+)((\s)+(.+))+</htmltag>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-16 22:18:11
Możesz użyć Pattern pattern = Pattern.compile( "[^<'tagname'/>]" );
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-17 15:10:32
Używam tego rozwiązania:
preg_match_all( '/<((?!<)(.|\n))*?\>/si', $content, $new);
var_dump($new);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-29 14:50:08
To wydaje się być najprostszym wyrażeniem regularnym ze wszystkich, które znalazłem
(?:<TAG>)([\s\S]*)(?:<\/TAG>)
- Wyklucz znacznik otwarcia
(?:<TAG>)
z meczów - dodawanie dowolnych znaków spacji lub innych znaków
([\s\S]*)
w dopasowaniach - Wyklucz tag zamknięcia
(?:<\/TAG>)
z meczów
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-30 09:19:02
<pre>([\r\n\s]*(?!<\w+.*[\/]*>).*[\r\n\s]*|\s*[\r\n\s]*)<code\s+(?:class="(\w+|\w+\s*.+)")>(((?!<\/code>)[\s\S])*)<\/code>[\r\n\s]*((?!<\w+.*[\/]*>).*|\s*)[\r\n\s]*<\/pre>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-26 23:04:04