리스트 형태에서 들여쓰기 하다가...

By qsp , Created on 21st Jun 2022

리스트 형태로 표시하기 위해서 ul ol 등의 태그를 사용하는데  

 

처음에는 이런 리스트 형태를 잘 사용하지 않았지만 점점 리스트 형태로 숫자나 점으로 표시되는 것을 많이 사용하게 되었다.

 

그런데 들여쓰기에서 문제다

 

<li> 내용내용내용내용내용…. <br /></li> 이런식으로 처리가 되는데 <br /> 태그만 바꿔주면 될 듯 해보였는데  

 

그래서 정규식과 스트링 변환을 통해서 처리할려고 했으나  

한 칸으로 내려진 것들까지 모두 바꿔버리게 되어서 이 부분을 고쳐보겠다고 하루종일 만지작 거렸다. 

 

하면서 든 생각은 정말 어려운 문제가 아닌것 같은데 이런것도 못 고치는데 뭘 할 수 있겠나? 부터 시작해서 신세한탄이 시작되었다 ㅠ

ROS2 cpp로 미니 프로젝트하면서 꽤 성장했다고 생각했는데 

거기에다 블로그도 다시 서버에 다시 배포하면서 좀 늘었나? 하고 잠깐 우쭐 했나보다

 

잠깐 쉰다음에 다시 문제를 해결하기 위해서 마음을 다잡고(?) 다시 집중해서 했다.

 

https://regexr.com/ 사이트에서는 정규식을 마음껏 테스트 할 수 있게 제공하는데 여기에서 

일단 regular expression을 다시 확실히 적용하기 위해서 연습을 하고

Li 태그만 추려내서 그 안에서만 변경이 가능하도록 하고  

원래 전체 문자열에서 그 바뀐 부분들과 다른 기존의 문자열들까지 다 나올 수 있게 변경을 했다. 

 

결과는 다행히 잘 된 거 같다. 

 

코드는 대략 아래와 같은식으로 구현을 했는데

 

```

$regResult = preg_match_all("/(<li>[\w가-힣?,.\/?;:'\[\]{}|`~!@#%&\*\(\)\-\=\+<br \/>]*)/", $replacedMd, $matches, PREG_OFFSET_CAPTURE);

이런식으로 정규식으로 찾아낸 다음에

 

foreach ($matches[0] as $match) {

    $strReplacePositions[] = array(

    "strOrigin" => $match[0], //원래 str

    "strReplaced" => $brReplacedToP[0] // 변환된 str

);

 

기존의 전체 문자열에서 다시 위에서 찾은 것만 바꿀 수 있게 변환

foreach($strReplacePositions as $strReplacePosition) {

$replacedMd = str_replace($strReplacePosition["strOrigin"], $strReplacePosition["strReplaced"], $replacedMd);

}

```

 

 

이렇게 나오는 것을 

 

 

 

  • 등록된 tag가 없습니다.