• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PHP - Wyrażenie regularne opisujące zdanie

0 głosów
861 wizyt
pytanie zadane 11 października 2019 w PHP przez kingkushlee Gaduła (3,960 p.)
Witam,

Chciałbym rozdzielić newsa na blogu do tablicy po kropkach, jednak występują tam takie skróty, jak:

wg. , 1. , 3. etc.

Jak wyglądałby regex, którego mógłbym użyć do wykonania preg_split() na wiadomości? Z góry dziękuję za pomoc.

2 odpowiedzi

0 głosów
odpowiedź 11 października 2019 przez Tomek Sochacki Ekspert (227,510 p.)
Musiałbyś zrobić całe mnóstwo alternatyw, uwzględniając również skróty, które tej kropki teoretycznie nie powinny mieć, ale zdarzają się blędy gdzie je mają... teoretycznie jest to do zrobienia, ale obawiam się, że taki regexp będzie cieżki w utrzymaniu i mało elastyczny...

A do czego w ogóle to potrzebujesz i jakie masz te przykładowe stringi? Pytam, bo może problem da się rozwiązać w jakiś zupełnie inny sposób, bardziej uniwersalny?
komentarz 11 października 2019 przez kingkushlee Gaduła (3,960 p.)
Chodzi mi o system bloga. Mam treść wpisu i chciałbym wyświetlić np 5 zdań i potem dodać link "Czytaj więcej" z przekierowaniem do wpisu blogowego.
1
komentarz 11 października 2019 przez Tomek Sochacki Ekspert (227,510 p.)
A dlaczego nie np. 500 pierwszych znakow? W takim podejsciu masz większą kontrolę na UX, a przy zdaniach może Ci się to rozjezdzac.
0 głosów
odpowiedź 12 października 2019 przez Chess Szeryf (76,730 p.)
.prop1 {
  background: orange;
}
<body style="background-color: gray;">
<?php

$keywords = preg_match_all("@(?:.|\n)+?\.|(?:.|\n)+?$@"
, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent varius pharetra nunc, ac dictum eros pellentesque eu. Morbi lobortis lectus leo. Aliquam sit amet luctus nunc. Nullam molestie ante sed dui aliquam imperdiet. Proin pellentesque ac orci ac ultricies. Etiam elementum ultrices erat, a placerat enim sodales at. Nulla suscipit eros a arcu euismod facilisis. Praesent sollicitudin odio et lobortis sodales. Aenean vulputate arcu eget ante aliquam, sed rhoncus lorem tempus. Nulla massa eros, cursus et ligula quis, scelerisque interdum tortor. Morbi efficitur orci porta, suscipit urna ac, euismod quam. Sed suscipit sem a mi feugiat, vel molestie lacus efficitur.

Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed at tortor tempus, finibus augue ornare, vehicula nisi. Praesent finibus nunc lorem, ac vestibulum nibh aliquet ut. Cras placerat efficitur magna ac cursus. Sed iaculis eros a finibus consequat. Quisque nunc tellus, aliquam vel mauris non, sodales ultrices nunc. Sed vel fringilla tellus.", $matches);

$len = 0;
$line_to_display = 0;
define('length_of_txt', 65);

for($i=0;$i<count($matches[0]);$i++) {
  if($len >= length_of_txt) {
    $line_to_display = $i;
    break;
  } else {
    $len += strlen($matches[0][$i]);
  }
}


if($_GET['expand'] == 'true') {
  echo "<div class='prop1'>";
  for($i=0;$i<$line_to_display;$i++) {
    echo $matches[0][$i];
  }
  echo "(...)";
  echo "</div>";
  echo "<form method='get' action=''>";
  echo "<input type='submit' value='expand' name='expand'/>";
  echo "<input type='hidden' value='false' name='expand'/>";
  echo "</form>";
} else {
  echo "<div class='prop1'>";
  for($i=0;$i<count($matches[0]);$i++) {
    echo $matches[0][$i];
  }
  echo "</div>";
  echo "<form method='get' action=''>";
  echo "<input type='submit' value='fold' name='expand'/>";
  echo "<input type='hidden' value='true' name='expand'/>";
  echo "</form>";
}

?>
</body>
(?!\.)(?:.|\n)+?(?=\.)|(?!\.)(?:.|\n)+?$

wikipedia.org - szukanie końca zdania

Jeśli chcesz, żeby było po zdaniach, to można by napisać na końcu każdego zdania non-printable znak, który później służyłby do określenia, w której części tekstu jest zdanie i na tej podstawie przełamywałoby/wyciągałoby się zdania w bardzo prosty sposób chociażby instrukcją split.
 

Podobne pytania

0 głosów
0 odpowiedzi 223 wizyt
pytanie zadane 16 grudnia 2019 w PHP przez mi-20 Stary wyjadacz (13,250 p.)
0 głosów
2 odpowiedzi 676 wizyt
0 głosów
2 odpowiedzi 408 wizyt
pytanie zadane 7 stycznia 2021 w Inne języki przez Gucci Gaduła (4,580 p.)

93,741 zapytań

142,676 odpowiedzi

323,294 komentarzy

63,319 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...